3

pyflakesとjshintを介してコミットをスキャンするためにgit-hookを実装し、ほとんどのpre-commitフックが壊れている理由に関するYipitの解説を読んだ後、彼git stashgit stash pop提案を実装することにしました。

残念ながら、git stash popファイルを「変更済み」としてマークします。これにより、「ディスク上で変更済み。ディスクから再読み込みしますか?」というページに戻るたびに、IDEから警告が表示されます。次に、「このバッファを編集してもよろしいですか?」という質問が表示されます。そして最後に、「このバッファを変更されたファイルに保存してもよろしいですか?」

私はそれが私のためにしようとしているすべてに感謝します、しかしそれは私に機能的に存在しない「変化」について尋ねています。

奇妙な推測ゲームをプレイする以外に、触れたすべてのファイルを変更済みとしてマークtouchしないようにする方法はありますか?git stash pop

4

2 に答える 2

0

変更が存在しないことを確認しますか?ファイルが変更済みとして表示されている場合は、空白またはファイルのアクセス許可(実行可能状態)であっても、何かが変更されています。を使用git diffして変更を確認できます。コマンドを使用して変更を確認することもできますgit commit -av(-vフラグはコミットの差分を表示します)。

IDEは、ファイルの現在の「バッファ」状態を維持します。そのファイルがディスク上で変更された場合(これによりgit stash pop|apply)、IDEはこれを認識し、ファイルを自動的に更新するように設定されていない限り(通常、IDEの設定/設定で)、現在のファイルを保存するかどうかを確認するメッセージが表示される場合があります新しいファイルとしてのバッファ(通常、gitを使用する場合は必要ありません)、またはファイルの状態が変更された状態でバッファを再ロードします。

于 2013-01-11T08:52:16.003 に答える
0

私はそうは思いません(たとえば、「GIT:非現在のブランチへのローカル変更の追加」で説明されているように、タイムスタンプが変更されています)。

最も簡単な方法は、IDEを自動的に更新するように構成することです。

たとえばEclipseの場合、これは「アクセス時に更新」の設定になります。


別のアプローチは、別のローカルリポジトリ(ローカルの変更がこれまでにないため、隠しておく必要がないリポジトリ)を保持することです。
pre-commitフックは現在のリポジトリに残ります。

フックは現在のインデックス(追加したもの)を使用しますが、他のワークツリーリポジトリを使用します。
そのためには、次のことをコミットする必要があります。

git commit --work-tree=/path/to/other/local/repo -m "my commit message"

フックが失敗しない場合は、コミット後のフック(現在のリポジトリに残っている)を他のリポジトリに移動し、現在のブランチをプルして、その(元の)作業ツリーを更新することができます。

cd /path/to/other/local/repo 
git --work-tree=/path/to/other/local/repo --git-dir=/path/to/other/local/repo/.git pull

(正しく機能するために、最初のリポジトリにあるフックが2番目のリポジトリを指定する必要があることに注意してくださいwork-tree) 。 これは、作業中の現在のブランチを考慮していないため、単純化された提案です(1つのブランチ「マスター」のみを想定しています)。 ただし、ブランチを検出し、そこからフックを適応させることができます(適切なチェックアウトと適切なブランチへの切り替えを使用)。git-dir

作業ツリーの2番目のリポジトリ更新後(最初のリポジトリのコミット後フックによる)、その2番目のリポジトリは、(最初​​のリポジトリと現在のリポジトリの)コミット前フックが使用できる元の作業ツリーとして機能する準備ができています。安全に動作します。

于 2013-01-11T08:29:37.830 に答える