0

Git でバイナリと見なされる XML ファイルがあります。このファイルは外部で変更され、コミットされます。

誰がそれを編集したか、ファイルの何が新しいかは気にしません。プルするたびに最新のファイルバージョンを取得したいだけです。現時点では、毎回git pullマージの競合があります。

リポジトリを同期する必要がgit pullあるたびに手動で行うことなく、このファイルを毎回上書きしたいだけです。git fetch/checkout/reset

注意:すべてのファイルではなく、そのファイルだけを上書きしたい.

ありがとう

4

3 に答える 3

0

ファイルへの変更が実際の変更ではない場合は、提出しないでください。これにより、バージョン履歴が乱雑になり、多くの問題が発生します。

あなたの声明から、どちらが当てはまるかはよくわかりませんが、2つの可能性があります。

  1. 問題のファイルはローカルストレージファイルであり、その内容は実際のソースコードとは関係ありません。この場合、ファイルは.gitignoreの一部である必要があります。

  2. このファイルは実際にはソースの一部であるため、将来的に関連する変更が加えられます。計画しているようにマージ設定を行うと、このファイルが実際に変更されると問題が発生します。マージは破壊的になるからです。

    この場合、解決策はもう少し複雑です(実際には変更されないものを変更する安っぽいツールの修正を取得することを除けば…)。おそらくあなたが探しているのは、gitの機能が変更されていないことを前提としています。次のコマンドでアクセスできます。

    git update-index --assume-unchanged <file>
    

    git docu(git help update-index):

    変更していないパスに「変更されていないと想定」ビットを設定して、gitがこのチェックを行わないようにすることができます。パスにこのビットを設定しても、gitがファイルの内容をチェックしてファイルが変更されているかどうかを確認するわけではありません。gitはチェックを省略し、変更されていないと見なします。作業ツリーファイルに変更を加えるときは、変更する前または後に、「変更されていないと仮定する」ビットを削除して、明示的にgitに通知する必要があります。

于 2012-12-21T15:19:12.833 に答える
0

Git Hooksを使用できると思いましたが、プルの前に実行されているものはありません...

考えられる回避策は、このファイルを削除し、必要なファイルとチェーンするスクリプトを作成することですgit pull...

于 2012-12-21T11:38:44.450 に答える
0

この回答は、特定のファイルで競合するマージに対して常にローカルバージョンを選択する方法を示しています。ただし、回答の途中で、著者は常にリモートバージョンを使用する方法についても説明しています。

基本的に、特定のファイルの特定のマージ ドライバーを指定するには、git 属性を使用する必要があります。

echo binaryfile.xml merge=keepTheirs > dir/with/binary/file/.gitattributes
git config merge.keepTheirs.name "always keep their file during merge"
git config merge.keepTheirs.driver "keepTheirs.sh %O %A %B"
git add -A
git commit -m "commit file for git attributes"

そしてあなたの中に作成keepTheirs.shします$PATH

cp -f "$3" "$2"
exit 0

詳細な説明については、その回答を参照してください。

于 2012-12-21T12:44:27.640 に答える