私たちはワークフローのためにMercurialからGitに移行する過程にあり、2つの小さな問題があります。
まず、ローカルリポジトリを空のリモート(ssh)ディレクトリに直接「クローン」することは可能ですか?
現在、新しいWebサイトを作成するときは、基本的にCMSをローカルで複製し、構成してから、セントラルリポジトリとWebサーバー(hg clone . ssh://account@server/www
)に複製します。そうすれば、プッシュ/プルの良さに瞬時にアクセスできます。
これにより、2番目の問題であるリモート展開が発生します。
現在Mercurialを使用しているため、リモートリポジトリには、変更セットを受信したときにhg up
を実行する単純なフックがあります。
Gitで同じことをするために、私はここの指示に従いました: http://caiustheory.com/automatically-deploying-website-from-remote-git-repository しかし、私は維持したいと思いますMercurialの場合と同様に、Webサイトのルートにある.gitディレクトリ(Apache構成で保護されており、一部のアカウントに複数のWebサイト/リポジトリがあるため、すべてのアカウントのGIT_DIRをエクスポートできません)。
作業ディレクトリをリポジトリから分離せずに、基本的に同じ設定にすることは可能ですか?
最初の質問に答えるには、はい、できます。リモートディレクトリがssh://user@Host/home/user/repo
であるとします。これはgitリポジトリでなければなりません。git init --bare
またはscp
を使用してローカルrepo.git
を作成します(git clone
を使用して作成できます)。次に行います:
git remote add Origin ssh://user@Host/home/user/repo
git Push --all Origin
これにより、ローカルに存在するすべてのブランチがリモートリポジトリにプッシュされます。
次の質問に進むには、別のコマンドセットを使用して同じことを実行できるはずです。これらを試してください:
$ cd /var/www # or wherever
$ mkdir somesite
$ cd somesite/
$ git init
$ git --bare update-server-info
$ git config receive.denycurrentbranch ignore
$ cat > hooks/post-receive
#!/bin/sh
git checkout -f
^D
$ chmod +x hooks/post-receive
もちろん、上記のremote/Pushコマンドを実行しますafterこのステップ。そうした後、特定のブランチをチェックアウトして、サーバー上の「somesite」クローンが実際にどのブランチをたどるかを確認できるようにする必要がある場合があります。それ以降、そのリポジトリにプッシュすると、そのブランチの再チェックアウトがトリガーされます。
私も最近この問題に遭遇し、次のように解決しました:
リモートサーバー:
1:/ tmp/bareという名前のディレクトリを作成します
2:そのディレクトリに移動します
3:git init --bareを実行します
ローカルマシン:
1:gitプロジェクトディレクトリに変更します。
2:git remote add bare ssh:// user @ server/tmp/bare
3:git Push --all bare
4:git remote remove bare
リモートサーバー:
1:git clone/tmp/bare/path/to/your/clone
ローカルマシン:
1:git remote add Origin ssh:// user @ server/path/to/your/clone
これは少し複雑ですが、機能し、奇妙なフラグを設定したり、デフォルトの動作をオーバーライドするようにgitに指示したりする必要はありません。したがって、非常に安全です。
この答えは良いですが、うまくいくことができませんでした。このリンクからの次のコードはそうしました http://thelucid.com/2008/12/02/git-setting-up-a-remote-repository-and-doing-an-initial-Push/ 。リモート実行時
mkdir my_project.git
cd my_project.git
git init --bare
git-update-server-info # If planning to serve via HTTP
すでに少なくとも1つのコミットが実行されている既存のリポジトリのローカル
git remote add Origin [email protected]:my_project.git
git Push -u Origin master
これが他の回答で問題があった人を助けることを願っています。
hg clone . ssh://account@server/www
に相当する最も簡単なgitは次のとおりです。
rsync -avz . ssh://account@server/www/reponame
実際、私はこの行を〜/ .bash_aliasesに追加して、任意のディレクトリをどこにでもミラーリングしています。
alias mirror="rsync -avz . ssh://account@server`pwd` --delete"
もし/ devや/ binのような特別なディレクトリにいると危険だと証明できます。注意してください。
私は同意し、一致しないファイルを削除することでpresto8を改善します。
rsync -avz . ssh://account@server/www/reponame --delete
代わりにあなたに与えるために、あなたは使うことができます:
git remote set-url Origin git://other.url.here
これらは、ローカルのgitリポジトリが別のリモートリポジトリを指している場合にも機能します