web-dev-qa-db-ja.com

sshを介したgitクローン

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'はすでに存在し、空のディレクトリではありません。

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

192
dlsa

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

Gitクローン、ssh:hostnameを解決できませんでした - git、開発 - Nicolas Kuttlergitバージョン1.7.9.5では、これがエラーでした)

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

...これも私の問題でした!ですから、基本的にgitsshでは、どちらかを使います。

  • ssh://[email protected]/absolute/path/to/repo.git/ - サーバー上の絶対パスのための単なるスラッシュ
  • [email protected]:relative/path/to/repo.git/ - 単なるコロン(サーバー上の相対パス(サーバーマシン上のusernameに対する相対パス)にはssh://を付けてはいけません)

これが誰かに役立つことを願っています、
乾杯!

191
sdaau

GitHubのリポジトリの場合は、次のことを試してください。

git clone ssh://[email protected]/<user>/<repository name>.git

Sshを使ってクローンするようにgitを設定するには:

110
dsrdakota

サーバーを呼び出しているものに対してcloneコマンドを実行する必要があります。しかし、私はあなたがあなたのローカルクライアント上でSSHサーバーを走らせていないのではないかと思います。あなたがこのアプローチに従うことを提案しなさい(私が記憶からこれをしている理由マニュアルをチェックする)

  1. サーバーマシンにログインします。
  2. git init --bareを使ってベアリポジトリを作成する
  3. クライアントマシンでは、リポジトリをサーバーにプッシュできます。 git remote add Origin ssh://user@server:/GitRepos/myproject.gitの後にgit Push Origin master
42
Alec the Geek

Git 101:

gitは分散型バージョン管理システムです。 gitを起動して実行するのにサーバーは必要ありません。それでもクールに見えるので、そうしたいと思うかもしれませんね。 (複数のコンピュータから単一のプロジェクトで作業したい場合にも便利です。)

「サーバー」を稼働させるには、空のリポジトリを作成するのでgit init --bare <your_project>.gitを実行する必要があります。空のリポジトリは、.gitディレクトリ内の設定ファイルを調べなくてもマシンにインポートできます。

これがうまくいくと思われるのであなたのクライアントのレポジトリを複製することができますが、私はいくつかのクライアント(すなわち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の基本的な仕組みを知っているが正確な構文を忘れている人のためのものです。

4
Wolfer

私は、git-flowと、3つの「ポイント」またはユースケース、git中央リポジトリ、ローカル開発、そして本番マシンを含む答えを試みたいと思います。 これはよくテストされていません

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

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

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

セントラルリポジトリとプロダクションマシンは同じマシン上にあります。

svnユーザーが 'server'として関連付けることができる中央リポジトリは次のように設定されています。私はすべてのgitリポジトリを保存するためのフォルダ/root/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 [email protected]:/root/git/flowers.git

これは私がそれにものを追加し始めることができるポイントに私を連れて行きます。最初にgitフローを設定します

git flow init -d

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

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

この時点でそれは開発ブランチにプッシュしました。これもマスターブランチに追加したいです。

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

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

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

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

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

2
Kinjal Dixit

前もって、私は私のGITスキルに少し欠けています。

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

より多くのGITスキルを持つ人が助けることができるようにあなたの意図の説明を追加できますか?あなたが本当にやりたいことは何ですか?

2

免責事項:これは bobbaluba によるコメントの単なるコピーです。それは他のどの答えよりも私を助けました。


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

git clone [email protected]:owner/repo.git
1
Pztar

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

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

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

0
Luc Depoorter