1

Git サーバーからレポをクローンし、追跡されたブランチをチェックアウトし、続いて git ステータスをチェックアウトします。git は、ファイルが削除されたことを示します。リポジトリでは作業は行われず、次の順序で git コマンドのみが実行されました。

git clone <myrepo>
git branch - indicates on master branch
git status - reports working directory is clean
git checkout <release-branch>
git status - shows a file has been deleted

失敗するls <file>と、ファイルが実際に削除されたことを示します。gitk は、ローカルのコミットされていない変更を示す赤いノードを示していますが、リポジトリには変更が加えられておらず、ブランチへのチェックアウトのみです。gitk でツリーを見ると、親コミットにはファイルがあります。 git checkout -- <file>ファイルを戻します。

ただし、同じリポジトリを複製してブランチを含め、ステータスを実行すると、ファイルが存在します。

git clone -b <release-branch> <myrepo>
git status - reports working directory is clean
ls <file> - shows file exists

これは、異なるシステムの複数の異なる人々によって繰り返されます。

ブランチを変更すると、このファイルが削除されるのはなぜですか?

完全なコマンド ライン シーケンスと出力は次のとおりです (無実を保護するために名前が変更されています)。

$ rm -rf test-*

$ git clone <repo> test-master
Cloning into 'test-master'...
remote: Counting objects: 11478, done.
remote: Compressing objects: 100% (5918/5918), done.
remote: Total 11478 (delta 7856), reused 8429 (delta 5558)
Receiving objects: 100% (11478/11478), 7.48 MiB | 183 KiB/s, done.
Resolving deltas: 100% (7856/7856), done.

$ cd test-master

$ git branch
* master

$ git status
# On branch master
nothing to commit (working directory clean)

$ git checkout relbranch
Checking out files: 100% (112/112), done.
Branch relbranch set up to track remote branch relbranch from origin.
Switched to a new branch 'relbranch'

$ git status
# On branch relbranch
# Changes not staged for commit:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       deleted:    prtbatt.c
#
no changes added to commit (use "git add" and/or "git commit -a")

$ cd ..

$ git clone -b relbranch <repo> test-relbranch
Cloning into 'test-relbranch'...
remote: Counting objects: 11478, done.
remote: Compressing objects: 100% (5918/5918), done.
remote: Total 11478 (delta 7856), reused 8429 (delta 5558)
Receiving objects: 100% (11478/11478), 7.48 MiB | 178 KiB/s, done.
Resolving deltas: 100% (7856/7856), done.

$ cd test-relbranch

$ git branch
* relbranch

$ git status
# On branch relbranch
nothing to commit (working directory clean)
4

1 に答える 1

0

誰かが2つの異なるブランチでファイルを2回作成し、マージせずに(はい、必要なむち打ちが発生しました)、1つのケースではすべて大文字を使用し、もう1つのブランチではすべて小文字を使用しました。彼らは間違いに気づいたら、ファイルの1つを削除してマージし、休暇を取りました。しかし、彼らはWindowsからの削除を行いましたが、これは大文字と小文字を区別しません。彼らがマージを行ったとき、それは両方のコピーに乗った。休暇から戻った後、彼らは自分のブランチでファイルを見つけることができず、これは何が起こっているのかを理解することにつながりました。ファイルを再作成してマージした後は、すべて問題ありません。

于 2012-08-16T15:44:16.670 に答える