26

Git リポジトリと Windows に問題があります。問題は、git リポジトリに Linux シンボリック リンクがあり、開発者が Windows を実行しているため、明らかに機能しないことです。そのシンボリックリンクは決して変更されるべきではないので、開発者でそれを削除し、その場所にフォルダーを追加する方法を見つけたいと思います(これはシンボリックが指すものです)が、gitにそれらの特定の変更を無視させます。これで、シンボリック リンクを削除し、同じ名前のフォルダーを作成して、すべてを無視する .gitignore を追加できます。gitがシンボリックリンクの削除を確実に無視するようにする限り、調査中に2つの可能な解決策を見つけました。私が見つけた解決策は次のとおりです。

git update-index --assume-unchanged [FILE]
git update-index --skip-worktree [FILE]

私の質問は、どのオプションが最も効果的かということです。これを一度行ったら、特に行わない限り元に戻されないようにしたいと思います。元に戻す、リセットする、ブランチを作成する、マージするなど、すべてが正常に機能することを確認したいと思います。

4

1 に答える 1

24

どちらのオプションにも問題があります。--assume-unchangedインデックスが破棄されるたびに自分自身をリセットするため (git reset など)、遅かれ早かれつまずく可能性があります。同じ--skip-worktreeことが言えます...ただし、チェックアウトしないファイルのローカルリストを維持して、必要に応じてスキップワークツリービットが自動的に再度設定されるようにすることができます。手順は次のとおりです。

  • core.sparseCheckoutリポジトリに対して true に設定します。
  • .git/info/sparse-checkout2 つのパターンを含むファイルを作成します。*すべてを含め、シンボリック リンク foo (トップ レベルへのアンカーを意味します)!/fooを除外します。/
  • ここで、skip-worktree ビットを手動で設定してから、シンボリック リンクを削除します。

これで、git がディレクトリを自動的にコミットすることを恐れずに続行できますが、誰かが明示的git addにディレクトリまたはその中のファイルを実行すると、問題が発生することに注意してください。

[編集して追加:] さらに議論した結果、最後の問題の解決策を特定しました*。ディレクトリ内にパターンを含む .gitignore ファイルを配置します。

于 2011-05-26T13:42:44.973 に答える