WindowsとLinuxによって共有されているディスクパーティション(フォーマット:NTFS)があります。 Gitリポジトリ(約6.7g)が含まれています。
[。] iの場合、Windowsまたはのみを使用する場合は、Linuxを使用してください。 Gitリポジトリを操作するには、すべて問題ありません。
[。]しかし、毎回システムを切り替えます。 git status
コマンドはインデックスを更新し、約1分です。 git status
を実行した後、同じシステムにgit status
を再度実行した場合。 1秒未満だけです。結果が結果です
# Just after switch from windows
[#5#wangx@manjaro:duishang_design] git status # this command takes more than 60s
Refresh index: 100% (2751/2751), done.
On branch master
nothing to commit, working tree clean
[#10#wangx@manjaro:duishang_design] git status # this time the command takes less than 1s
On branch master
nothing to commit, working tree clean
[#11#wangx@manjaro:duishang_design] git status # this time the command takes less than 1s
On branch master
nothing to commit, working tree clean
Gitキャッシュについていくつかの問題があると思います。例:WindowsとLinuxはすべて.git/index
ファイルをキャッシュファイルとして使用しますが、LinuxシステムのgitはWindowsによって変更された.git/index
を認識できません。そのため、インデックスを更新し、.git/index
ファイルを置き換えることができます。これは、Windowsで次のgit status
スーパーファストとgit status
を非常に遅くする(Windowsシステムはインデックスファイルを再度更新するため)。
私の推測は正しいですか?もしそうなら、どのように私はさまざまなシステムのためにインデックスファイルを設定することができますか?どのようにして問題を解決することができますか?
あなたはここで完全に正しいです:
ここで使用しているもの、gitがさまざまに index 、ステージング領域、またはキャッシュを呼び出します。 、実際にはキャッシュデータが含まれています。
それが含むキャッシュデータはシステムコールの結果です。
Linuxシステムによって返されたシステムコールデータは、Windowsシステムによって返されたシステムコールデータからのです。
したがって、OSスイッチはすべてのキャッシュデータを完全に無効にします。
...どのようにさまざまなシステムのインデックスファイルを使用する方法を使用できますか?
ここであなたの最善の賭けはこれを全然行うことではありません。 2つの異なるワークツリー、またはおそらく2つの異なるリポジトリを作ります。しかし、それがこの他の代替よりも苦痛な場合は、これらのアイデアを試してみてください。
Gitが単にを使用する実際のインデックスファイルは、デフォルトで.git/index
を使用します。 GIT_INDEX_FILE
を他の(相対的または絶対的な)パスに設定して、ファイルを指定できます。したがって、.git/index-linux
と.git/index-windows
を持つことができ、使用しているどちらのOSに基づいてGIT_INDEX_FILE
を設定します。
一部のGITコマンドは一時インデックスを使用します。それらはGIT_INDEX_FILE
を自分自身で設定することによってこれを行います。それらが un - それを設定した場合、誤って.git/index
をこの時点で使用することができます。そのため、OSを切り替えるときに、の名前の変更.git/index
が途中で邪魔にならないようにする。以前の.git/index-windows
と.git/index-linux
を保持しますが、使用中に.git/index
に使用されているのか名前を変更してから、他のシステムに切り替える前に.git/index-name
に名前を変更します。
繰り返しますが、私はこれらの方法のどちらかを試みることをお勧めしませんが、それらは多かれ少なかれ働く可能性があります。
トレクが言及されているように、あなたはおそらくこれをしたくない。オペレーティングシステム間でレポを共有することは一般的には良い考えではありません。
ただし、Linux用のWindowsとWindowsサブシステム間でレポを共有することが可能です。 core.checkStat
をminimal
に設定して、十分でない場合はcore.trustctime
false
に設定してください。これは、索引に格納されている最小限の情報をもたらします。つまり、データはできるだけポータブルとなるようになります。
ただし、リポジトリにシンボリックリンクがある場合は、さまざまなものがリフレッシュを防ぐ予定です。 Linuxは通常、シンボリックの長さをその長さでバイト単位で)と見なされ、Windowsは1つ以上のディスクブロックを取ります。そのため、オペレーティングシステム間でサイズが不一致になります。 Sizeは、無効にできないインデックスで使用されている属性の1つであるため、これは回避できません。