11

まず、全体像: 実行中の Redmine / Gitolite サーバー用の git post-receive スクリプトを作成しようとしています。さまざまな推奨事項に従って、Redmine が読み取るための裸のローカル リポジトリを作成し、Gitolite で受信後スクリプトを設定して、変更を Redmine リポジトリにプッシュします。

しかし、私はGitに非常に慣れていないので、ここで簡単なタスクを実行することさえできません>_<。これが分かれば、上記のスクリプトが書けるはずです。テスト リポジトリをセットアップした後、テストとして 2 つのリポジトリを作成しました。

(「Central Repo」は git@localhost:testing の Gitolite リポジトリです)

cd /tmp
mkdir /tmp/test
$ git clone git@localhost:testing
$ git clone git@localhost:testing testing2
$ git clone git@localhost:testing --bare

ls を実行すると:

$ ls
testing  testing2  testing.git

ここで、testing2 内のテスト ファイルを変更し、変更を中央リポジトリにプッシュします。

$ cd testing2
$ echo 'testline' >> test && git commit --allow-empty-message -a -m '' && git push 

予想どおり、「testing」フォルダーで「git pull」を実行すると、すべてが期待どおりに機能します。

$ cd testing
$ git pull
remote: Counting objects: 5, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From localhost:testing
   3242dba..a1ca5ba  master     -> origin/master
Updating 3242dba..a1ca5ba
Fast-forward
 test |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)
$ diff ./test ../testing2/test
$

最後の「差分」で示したように、「testing」ディレクトリと「testing2」ディレクトリは期待どおりに機能します。「git pull」コマンドは、2 つのディレクトリを同期します。

ただし、testing.git (別名: ベア リポジトリ) に cd すると、git fetch / git reset --soft はベア リポジトリを最新バージョンに更新できません。

$ ls
branches  config  description  HEAD  hooks  info  objects  packed-refs  refs
$ git fetch
remote: Counting objects: 5, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From localhost:testing
 * branch            HEAD       -> FETCH_HEAD
$ git reset --soft
$ cd ..
$ git clone ./testing.git testing3
Cloning into testing3...
done.
$ cd testing3
$ diff test ../testing2/test
5a6
> testline

最後の例からわかるように、ベア リポジトリは更新に失敗しており、2 つのファイルには何らかの違いがあります。私は何を間違えましたか?

前もって感謝します

4

1 に答える 1

26

あなたのフェッチはmasterブランチを更新してFETCH_HEADませFETCH_HEAD

ベアリポジトリにプルするにはどうすればよいですか?」で述べたように、次のことを行う必要があります。

git fetch origin master:master

または、すべてのブランチの場合:

git fetch origin +refs/heads/*:refs/heads/*

コリン・D・ベネットは次のように付け加えました。

これらを定期的に取得する場合は、次のことを考慮する必要があります。

git config remote.origin.fetch +refs/heads/*:refs/heads/*

これによりgit fetch、ブランチをリモートと同期するように入力できます。
これは、ローカル ブランチの編集が想定されていないベア リポジトリでのみ意味があることに注意してください

于 2012-05-22T07:19:25.787 に答える