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'はすでに存在し、空のディレクトリではありません。
しかし、私はその道が空いているのを見ました。
何が起きてる ?
これはおそらく質問と直接無関係です。しかし、私が自分で作ったばかりの間違いの1つは、OPにあるURL指定ssh://user@server:/GitRepos/myproject.git
です。つまり、コロン:
と、絶対パスを示すスラッシュ/
の両方があります。
Gitクローン、ssh:hostnameを解決できませんでした - git、開発 - Nicolas Kuttler (git
バージョン1.7.9.5では、これがエラーでした)
最初に使用したコマンドの問題は、scpのような構文を使用しようとしたことです。
...これも私の問題でした!ですから、基本的にgit
とssh
では、どちらかを使います。
ssh://username@Host.xz/absolute/path/to/repo.git/
- サーバー上の絶対パスのための単なるスラッシュusername@Host.xz:relative/path/to/repo.git/
- 単なるコロン(サーバー上の相対パス(サーバーマシン上のusername
に対する相対パス)にはssh://
を付けてはいけません)
これが誰かに役立つことを願っています、
乾杯!
GitHubのリポジトリの場合は、次のことを試してください。
git clone ssh://git@github.com/<user>/<repository name>.git
Sshを使ってクローンするようにgitを設定するには:
SSH鍵を生成する そして生成した鍵をに追加する アカウント設定 - > SSHキー
サーバーを呼び出しているものに対してcloneコマンドを実行する必要があります。しかし、私はあなたがあなたのローカルクライアント上でSSHサーバーを走らせていないのではないかと思います。あなたがこのアプローチに従うことを提案しなさい(私が記憶からこれをしている理由マニュアルをチェックする)
- サーバーマシンにログインします。
git init --bare
を使ってベアリポジトリを作成する- クライアントマシンでは、リポジトリをサーバーにプッシュできます。
git remote add Origin ssh://user@server:/GitRepos/myproject.git
の後にgit Push Origin master
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の基本的な仕組みを知っているが正確な構文を忘れている人のためのものです。
私は、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 root@example.net:/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
コマンドは開発用マシンで使用されているもののようになります。
前もって、私は私のGITスキルに少し欠けています。
隠しディレクトリである.git
内のフォルダのみが含まれているので、これがあなたのマシン上の裸のリポジトリを複製することになります。 ls -al
を実行すると、リポジトリの中に.git
またはcd .git
が表示されます。
より多くのGITスキルを持つ人が助けることができるようにあなたの意図の説明を追加できますか?あなたが本当にやりたいことは何ですか?
免責事項:これは bobbaluba によるコメントの単なるコピーです。それは他のどの答えよりも私を助けました。
例としてssh://
を使用するときは、git clone
プレフィックスを削除する必要があります。
git clone git@github.com:owner/repo.git
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の指定を解釈しませんでした。アレックの回避策を使用しました。