35

ワークフローのために 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の指示に従いましたが、.git ディレクトリを Web サイトのルートに保持したいと思います。 Mercurial の場合と同様です (Apache 構成によって保護されており、一部のアカウントには複数の Web サイト/リポジトリがあるため、すべてのアカウントの GIT_DIR をエクスポートすることはできません)。

作業ディレクトリをリポジトリから分離せずに、基本的に同じセットアップを行うことは可能ですか?

4

6 に答える 6

44

最初の質問に答えるには、はい、できます。リモート ディレクトリが であるとし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

もちろん、この手順の、上記のリモート/プッシュ コマンドを実行します。その後、特定のブランチをチェックアウトする必要がある場合があります。これにより、サーバー上の「somesite」クローンが実際にどのブランチに従うべきかを知ることができます。それ以降、そのリポジトリにプッシュすると、そのブランチの再チェックアウトがトリガーされます。

于 2010-11-10T09:40:15.487 に答える
28

私も最近この問題に遭遇し、次のように解決しました。

リモートサーバー上:

1: /tmp/bare という名前のディレクトリを作成します
2: そのディレクトリに移動し
ます 3: git init --bare を実行します

ローカル マシン上:

1: git プロジェクト ディレクトリに変更します
2: git remote add ベア ssh://user@server/tmp/bare
3: git push --all ベア
4: git リモート ベアを削除します

リモートサーバー上:

1: git clone /tmp/bare /path/to/your/clone

ローカル マシン上:

1: git remote add origin ssh://user@server/path/to/your/clone

これは少し複雑ですが、機能し、奇妙なフラグを設定したり、デフォルトの動作をオーバーライドするように git に指示したりする必要はありません。したがって、非常に安全です。

于 2013-09-28T19:57:03.353 に答える
4

この答えは良いですが、うまく機能させることができませんでした。このリンクの次のコードは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 git@example.com:my_project.git
git push -u origin master

これが、他の回答に問題があった人の助けになることを願っています。

于 2012-04-08T04:19:05.650 に答える
3

同等の最も簡単な githg clone . ssh://account@server/wwwは次のとおりです。

rsync -avz . ssh://account@server/www/reponame

実際、この行を ~/.bash_aliases に追加して、任意のディレクトリをどこにでもミラーリングしました。

alias mirror="rsync -avz . ssh://account@server`pwd` --delete"

/dev や /bin などの特別なディレクトリにいる場合、危険であることが判明する可能性があります。気をつけて。

于 2013-03-02T16:49:02.640 に答える
0

代替手段を提供するために、次を使用できます。

git remote set-url origin git://other.url.here

これらは、ローカルの git リポジトリが別のリモート リポジトリを指している場合にも機能します

于 2015-10-06T21:39:37.843 に答える