3

私は現在gitを試していますが、サーバー上のベアリモートリポジトリにプッシュすると、異なるブランチに基づいて2つの異なるサイトが更新されるようにワークフローを作成しようとしています。

受信後のフックは次のとおりです。

#!/bin/sh
GIT_WORK_TREE=/www/development/ git checkout -f master
GIT_WORK_TREE=/www/production/ git checkout -f production

https://stackoverflow.com/a/3838804/1097483に基づいていますが、いくつかの変更が加えられています。

残念ながら、テスト中に、ブランチのいずれかに新しいテストファイルをコミットすると、Webルートがプッシュされて正常に更新されますが、同じテストファイルを削除する場合、Webルートは削除されたファイルのコピーを保持します。

ポストレシーブフックを取得して強制的に削除する方法を知っている人はいますか?

4

3 に答える 3

2

おそらく使用する必要がgit-resetありますgit-clean

#!/bin/sh
GIT_WORK_TREE=/www/development/ git reset --hard master
GIT_WORK_TREE=/www/development/ git clean -fdx
GIT_WORK_TREE=/www/production/ git reset --hard production
GIT_WORK_TREE=/www/production/ git clean -fdx
于 2013-01-28T11:13:39.537 に答える
1

作業ツリーのチェックアウトでは、作業ディレクトリのリポジトリに関する情報は記録されないと思います。そのため、すでにチェックアウトされているバージョンを更新する場合、Gitは、どのdiffを適用する必要があるのか​​、またどのファイルを削除する必要があるのか​​を判断できません。

最も簡単な解決策は、フォルダ内のすべてのファイルをチェックアウトする前に削除することです。

于 2013-01-28T11:12:56.813 に答える
0

私はやることになりました

#!/bin/sh
GIT_WORK_TREE=/www/development/ git checkout -f master
GIT_WORK_TREE=/www/development/ git clean -fdx
GIT_WORK_TREE=/www/production/ git checkout -f production
GIT_WORK_TREE=/www/production/ git clean -fdx

@Koraktorの回答に基づいています。

于 2013-01-29T03:13:32.313 に答える