2

ファイル内の$Id:$viaの展開を有効にしました。これにより、他の誰かが私のリポジトリをチェックアウトしてそこからインストールしたときに、ファイルが古いかどうかをすばやく特定できます。ident.gitattributes

現在、私は自分の Git リポジトリの内容を他の (非開発、つまり Git を使用しない) システムにも同期しています。問題は、キーワードの展開がcheckoutでのみ発生することですが、私のワークフローはcommit -> push -> syncであるため、同期されたコピーには古い ID が含まれています。

ローカルコミット後に ID を簡単に強制的に更新するにはどうすればよいですか? (コミット後にこれを自動的に行うためのボーナスポイント!)

おそらくファイルの内容が変更されていないため、シンプルgit checkoutは機能しません( も機能しません)。--forceどちらもありませんgit checkout-index --force。私はこれをローカルの変更によってのみ達成することができました(面倒で、変更されたファイルを知る必要があります):

$ echo "modified" >> file
$ git checkout file

または、以前のコミットを一時的にチェックアウトします。

$ git checkout HEAD^
$ git checkout HEAD@{1}
4

3 に答える 3

1

ここにいくつかの提案があります:

git checkout --force .または多分git checkout --force file.txt

これらのコマンドのいずれかが機能する場合は、スクリプトを作成し、.git/hooks/post-commitそのスクリプトをそのコマンド (または機能するコマンド) を呼び出すワンライナーにすることができます。そうすれば、git はすべてのコミットでそれを実行します。フック スクリプトは、スクリプトの cwd として設定された作業ディレクトリ (.git フォルダーがある場所) のルートを自動的に持っていると思います。

編集:

実行するtouch file.txt; git checkout file.txtと、git は、テストしたときに ident 属性の適用を含む完全なチェックアウトを実行します。うまくいけば、それは何らかの形で使用できます

于 2012-11-19T16:33:14.990 に答える