sshによるgit clone


233

gitリポジトリを作成したプロジェクトがあります。

$ cd myproject  
$ git init  
$ git add .  
$ git commit  

私は別のマシンで裸のクローンを作成したかった:

$ cd ..  
$ git clone --bare myproject  ssh://user@server:/GitRepos/myproject.git  

クローンを実行しましたが、答えは出力されませんでした。サーバーマシンにログオンし、ファイルの保存方法を確認しようとしました。パス/ GitReposが空だったので、もう一度クローンを作成することにしました。

$ git clone --bare myproject  ssh://user@server:/GitRepos/myproject.git

今回の答えは:

fatal:宛先パス 'ssh:// user @ server:/GitRepos/myproject.git'はすでに存在し、空のディレクトリではありません。

しかし、私は道が空であるのを見ました。
何が起きてる ?


ランニングgit clone --bareはあなたが思っていることを実行するとは思わない。
Wolfer、2014

3
私にとって、ssh://はリモートプロトコルを使用する代わりにフォルダを作成しました。@ alec-the-geekの答えを使用して、問題を解決しました。これに適した答えを選択していただけませんか-それはあなたの仕事です。
akauppi 2015年

1
@akauppi:すべての回答を検討するのはOPの責任ですが、満足するまで回答を選択する義務はありません。(もちろん、彼らに思い出させたり、彼らが答えを受け入れるために必要な詳細情報を尋ねたりしても問題ありません!)
jvriesem

もちろん@jvriesem。「それはあなたの仕事です」を今すぐ削除します。しかし、それは古いものです... :)
akauppi '18

回答:


219

これはおそらく質問とは直接無関係です。しかし、私が自分で間違えた1つの間違い、およびOPでわかるように、URLの指定ssh://user@server:/GitRepos/myproject.gitです。つまり、絶対パスを示す後にコロン:とフォワードスラッシュの両方があり/ます。

次に、Gitクローンを見つけました、ssh:ホスト名を解決できませんでした– git、開発– Nicolas Kuttlergitバージョン1.7.9.5 で発生していたエラーだったため)、

最初に使用したコマンドの問題は、scpに似た構文を使用しようとしたことです。

...これも私の問題でした!したがって、基本的にはgitssh、次のいずれかを使用します

  • ssh://username@host.xz/absolute/path/to/repo.git/ -サーバー上の絶対パスを示すスラッシュ
  • username@host.xz:relative/path/to/repo.git/-コロンのみ(ssh://サーバー上の相対パス(usernameサーバーマシンのホームディレクトリに対する相対パス)は必要ありません)

これが誰かを助けることを願って、
乾杯!


84
これは機能しません。sshで相対パスを指定する場合は、ssh://プレフィックスを失う必要があります。私はこれを理解するために20分を費やしました。git clone username@host.xz:relative/path/to/repo.git/うまくいくはずです。
ボバルバ2013年

2
Debian 8でgit 2.1.4を使用して試してみました。どちらの提案も機能しません。最初の試行では/ GitReposの下にディレクトリは作成されませんでした。2回目の試行では、パスがすでに存在していると報告されました。報告された元の問題と同じように
dlsa '30 / 07/30

5
コメント@bobbaluba(および更新された回答)により、私もこれに20分を費やす必要はありませんでした。ありがとう!
olafure

143

GitHubのリポジトリについては、次を試してください。

git clone ssh://git@github.com/<user>/<repository name>.git

sshを介して複製するようにgitを設定するには、以下を参照してください。


<user>はgithubのユーザー名ですか、githubのメールアドレスですか?このリンクは、公開鍵の生成中に電子メールアドレスを使用するように勧めているためです。help.github.com/en/github/authenticating-to-github/…それを試した後(sshキーgenの空のパスフレーズ)、それでもgithubからリポジトリを複製できませんでした。PS私はエージェントにキーを追加しませんでした。
ミニー

gitlabでも同じように機能します。その前に、あなたが提案したように、SSHキーのセットアップを有効にする必要があります
Venkataraman R

45

サーバーと呼んでいるものに対してcloneコマンドを実行する必要があります。しかし、ローカルクライアントでsshサーバーを実行していないので、とにかく機能しません。このアプローチに従うことをお勧めします(メモリからこれを実行しているため、マニュアルを確認してください)

  1. サーバーマシンにログインします。
  2. を使用してベアリポジトリを作成する git init --bare
  3. クライアントマシンで、リポジトリをサーバーにプッシュできます。git remote add origin ssh://user@server:/GitRepos/myproject.gitに続くgit push origin master

素晴らしいアドバイス!以前にpure-server-git-foldersを扱ったことのない(私のような)初心者向けのメモ:2. cd / GitRepos; mkdir myproject.git; git init --bareの前にcd myproject.git。ここでは作業コピーを取得しません-リポジトリファイルとフォルダー(通常は.git内)が表示されないため、フラグの名前になります。ありがとう
akauppi 2015年

2
「git init --bare」は.gitディレクトリを作成しません。ファイルを直接フォルダに配置します。リモートオリジンを追加すると、「 "致命的:gitリポジトリではありません(またはマウントポイント/ homeまでの親ではありません)。ファイルシステムの境界で停止しています(GIT_DISCOVERY_ACROSS_FILESYSTEMが設定されていません)。
dlsa

10

免責事項:これはボバルバのコメントの単なるコピーであり、将来の訪問者に対してより見やすくなっています。他のどの回答よりも助けになりました。


例としてssh://使用git cloneする場合は、プレフィックスを削除する必要があります

git clone git@github.com:owner/repo.git

5

これを試して。

ステップ1:

ls -al ~/.ssh

ここに画像の説明を入力してください

ステップ2:

ssh-keygen 

(デフォルト値にEnterキーを使用) ここに画像の説明を入力してください ステップ3:構成ファイルをセットアップするには

vim /c/Users/Willie/.ssh/config

ホストgitlab.com
HostName gitlab.com
ユーザーgit
IdentityFile〜/ .ssh / id_rsa

ステップ4:

git clone git@gitlab.com:<username>/test2.git

ここに画像の説明を入力してください

ステップ5:
ステップ4が
完了したら、1.test2.gitファイルがダウンロードされます
。2。〜/ .sshに新しいファイル(known_hosts)が作成されます。
ここに画像の説明を入力してください

PS:id_rsaとid_rsa.ubを自分で作成し、Gitlabサーバーに配信します。クライアント側(WindowsおよびLinux)に対して両方のキーを使用する。


4

Git 101:

git分散型バージョン管理システムです。gitを起動して実行するためにサーバーは必要ありません。それでもかっこいいので、そうしたいかもしれませんね。(複数のコンピューターから1つのプロジェクトで作業する場合にも役立ちます。)

したがって、「サーバー」を実行するにはgit init --bare <your_project>.git、これを実行する必要があります。これにより、空のリポジトリが作成され、.gitdir 内の構成ファイルをいじる必要なく、マシンにインポートできます。

この後、クライアントのリポジトリを正常にgit-gui機能するように複製できますが、一部のクライアント(つまり)は完全に空のリポジトリの複製に失敗することがわかりました。これを回避するには、を実行する必要がありますcd <your_project>.git && touch <some_random_file> && git add <some_random_file> && git commit && git push origin master。(以前に行っていない場合は、そのマシンのgitのユーザー名と電子メールを構成する必要があることに注意してください。実行する実際のコマンドは、表示されるエラーメッセージに含まれるため、省略します。)

したがって、この時点でを実行するだけで、リポジトリを任意のマシンに複製できますgit clone <user>@<server>:<relative_path><your_project>.git。(他の人が指摘したssh://ように、絶対パスを使用する場合は、プレフィックスを付ける必要がある場合があります。)これは、クライアントからサーバーにすでにログインできることを前提としています。(sshリモートサーバーに多くのものをプッシュする場合は、設定ファイルとのキーを設定するとボーナスポイントも得られます。)

いくつかの関連リンク:
これは、あなたが知っておくべきことをほとんど教えてくれます。
そして、これはgitの基本的な仕組みを知っているが、正確な構文を忘れてしまう人のためのものです。


現在、これらのリンクはどちらも機能していないか、期待したとおりに表示されていません。
トッド・

2

git-flowと3つの「ポイント」またはユースケース、gitセントラルリポジトリ、ローカル開発、本番マシンを含む回答を試みたいと思います。 これは十分にテストされていません

私は信じられないほど具体的なコマンドを与えています。と言う代わりに<your folder>、私は言い/root/gitます。元のコマンドを変更する唯一の場所は、特定のサーバー名をに置き換えることexample.comです。フォルダーの目的を説明するので、それに応じて調整できます。混乱があればお知らせください。回答を更新します。

サーバーのgitバージョンは1.7.1です。サーバーはCentOS 6.3(最終)です。

開発マシンのgitバージョンは1.8.1.1です。これはMac OS X 10.8.4です。

中央リポジトリと本番マシンは同じマシン上にあります。

svnユーザーが「サーバー」として関連付けることができる中央リポジトリは、次のように構成されます。/root/gitすべてのgitリポジトリを保存するフォルダーがあります。「flowers」というプロジェクトのgitリポジトリを作成したい。

cd /root/git
git clone --bare flowers flowers.git

gitコマンドは2つのメッセージを出しました:

Initialized empty Git repository in /root/git/flowers.git/
warning: You appear to have cloned an empty repository.

心配することは何もありません。

開発マシンでは以下のように構成されています。/home/kinjal/Sitesすべてのプロジェクトを配置するフォルダーがあります。次に、中央のgitリポジトリを取得します。

cd /home/kinjal/Sites
git clone root@example.net:/root/git/flowers.git

これで、何かを追加できるようになりました。最初にgit flowを設定しました

git flow init -d

デフォルトでは、これはブランチにありdevelopます。ここにコードを追加します。次に、中央のgitリポジトリにコミットする必要があります。

git add .
git commit -am 'initial'
git push

この時点で、それは開発ブランチにプッシュされました。これもmasterブランチに追加したいと思います。

git flow release start v0.0.0 develop
git flow release finish v0.0.0
git push

リリース開始からリリース終了までの間に何もしなかったことに注意してください。そして、リリースが完了したとき、2つのファイルを編集するように求められました。これにより、開発ブランチがマスターにプッシュされました。

中央のgitリポジトリと同じマシンにある本番サイトで、リポジトリをに配置します/var/www/vhosts/example.net。私はすでに持っています/var/www/vhosts

cd /var/www/vhosts
git clone file:///root/git/flowers.git example.net

本番マシンが別のマシンにもある場合、git cloneコマンドは開発マシンで使用されているコマンドのようになります。


1

事前に、GITスキルが少し不足しています。

それはあなたのマシンに裸のリポジトリをクローンします、.gitそれは隠しディレクトリであるフォルダのみを含んでいます。実行するls -alと、リポジトリ内.gitまたはcd .gitリポジトリ内が表示されます。

より多くのGITスキルを持つ誰かが手助けできるように、意図の説明を追加できますか?あなたがそれをどのように計画するかではなく、あなたが本当にしたくないのは何ですか?


コマンドを誤って解釈しました。私がしたことは、現在のディレクトリの下にサブディレクトリツリーssh:/myproject.gitを作成することでした。リモートディレクトリにクローンを作成していると思いましたが、コマンドが実際に実行するのはリポジトリからのクローンです。
dlsa

0

私はしました:git clone --bare "/ GITREPOSITORIES / RepoA" "ssh:// luc @ EERSTENASDS119J / volume1 / RepoA"結果:fatal:宛先パス 'ssh:// luc @ EERSTENASDS119J / volume1 / RepoA'はすでに存在し、空のディレクトリではありません。

システムは、現在のパスにディレクトリssh:// luc @ EERSTENASDS119J / volume1 / RepoAを作成しました。

そのため、git cloneはURL仕様を解釈しませんでした。アレックの回避策を使用しました。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.