以前にコミットされたファイルが削除されたと表示される理由は、最初のリポジトリのgitインデックス(単に という名前のファイルindex
) が 2 番目のリポジトリのインデックスと異なるためです。最初のインデックスは作業ツリーに対応しますが、2 番目のインデックスは初期化されていないためエントリがありません。からの出力git status
は、2 つの比較の結果です。
- とインデックスの間
HEAD
(コミットするステージングされた変更を決定するため)
- インデックスと作業ツリーの間 (コミットされないステージングされていない変更を決定するため)
あなたの場合、HEAD
2番目のリポジトリは、ルートファイルシステムからコミットしたすべてのファイルを含むコミットを指していますが、インデックスは空です。したがって、git が最初の比較を実行すると、これらの各ファイルは次のコミットで削除されるようにステージングされていると見なされます。
git が 2 番目の比較を実行すると、作業ツリーにはコミットと同じファイルがすべて含まれていることがわかりますが、もちろんインデックスはまだ空であるため、これらのファイルを「新しい」追跡されていないファイルと見なします。そのため、すべてのファイルが削除され、追跡されていないと表示されます。
解決策は非常に簡単です: 一致するように 2 番目のインデックスを初期化しますmaster
。
git --work-tree=/ reset
私がここにいる間、あなたが投稿したコマンドに関する他のいくつかの問題を指摘する必要があります:
- まず、
git add -U
すべての git リポジトリ メタデータ ファイルをリポジトリに追加します。つまり、リポジトリはそれ自体を追跡しています。これは使用方法の結果として起こっており、--work-tree
非常に悪いことです。info/exclude
またはに追加して、リポジトリ ファイルが無視されるようにする必要があります.gitignore
。
- 第 2 に、ここにはベア リポジトリは必要なく、切り離された作業ツリーだけが必要です。
git config core.bare false
とexport GIT_DIR=/media/usb
;を介してこれを達成できたはずです。次に、外部から git コマンドを実行できます (つまり、上記) 。各コマンドにグローバル オプションとして/media/usb
継続的に含める必要はありません。--work-tree=/
以下は、2 番目の箇条書きを除いて、今説明したすべてをカプセル化した完全なテスト ケースです。
#!/bin/sh
root=fakeroot
mkdir -p $root/media/usb{1,2} $root/{bin,etc}
echo a > $root/bin/sh
echo b > $root/etc/hosts
cd $root/media/usb1
git init --bare
# We don't want our git repository meta-data being tracked.
echo '/media/usb*/' >> info/exclude
git --work-tree=../.. add -A ../..
git --work-tree=../.. commit -m '1st commit'
echo c >> ../../etc/hosts
git --work-tree=../.. add -A ../..
git --work-tree=../.. commit -m '2nd commit'
git remote add origin ../usb2
git --git-dir=../usb2 init --bare
git push origin master
cd ../usb2
echo '/media/usb*/' >> info/exclude
echo "========================================="
echo "index in usb2 is not yet initialized:"
git --work-tree=../.. status
echo "========================================="
echo "initialize index to master (HEAD)"
git --work-tree=../.. reset
echo "========================================="
echo "now we have a clean working tree:"
git --work-tree=../.. status