Der Umzug erkannt werden, wenn Sie einen direkten Vergleich zu tun, bevor sie zwischen und nach Revisionen, aber nicht, wenn Sie ein git log
regelmäßig lesen:
[[email protected] testgit] echo hello world > foo
[[email protected] testgit] git init
gitInitialized empty Git repository in /home/bd/testgit/.git/
[[email protected] testgit] git add foo
[[email protected] testgit] git commit -m 'test'
[master (root-commit) 772dbe5] test
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 foo
[[email protected] testgit] mv foo bar
[[email protected] testgit] echo baz > quux
[[email protected] testgit] git add quux
[[email protected] testgit] git commit -a -m 'rm; add'
[master 59dd10b] rm; add
2 files changed, 1 insertions(+), 1 deletions(-)
delete mode 100644 foo
create mode 100644 quux
[[email protected] testgit] git add bar
[[email protected] testgit] git commit -m 'add'
[master 823f70f] add
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 bar
[[email protected] testgit] git log --stat -m
commit 823f70fe50828204686a6a42a5e98dc9b258903b
Author: Bryan Donlan <[email protected]>
Date: Mon Jan 17 05:06:16 2011 -0500
add
bar | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
commit 59dd10bfb72bb9005edecb1b7609978d82d21652
Author: Bryan Donlan <[email protected]>
Date: Mon Jan 17 05:05:58 2011 -0500
rm; add
foo | 1 -
quux | 1 +
2 files changed, 1 insertions(+), 1 deletions(-)
commit 772dbe5357253b533f8f2b9c64836dc09a51def4
Author: Bryan Donlan <[email protected]>
Date: Mon Jan 17 05:04:35 2011 -0500
test
foo | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
### As you can see, a log doesn't show the move, but...
[[email protected] testgit] git diff --stat 823f..772d -M
bar => foo | 0
quux | 1 -
2 files changed, 0 insertions(+), 1 deletions(-)
### A direct comparison does
Dieses Verhalten ist, weil git eigentlich nicht bewegen speichern/Informationen umbenennen - es rekonstruiert es, indem es den Inhalt addierter/entfernter Dateien vergleicht. Bei einem direkten Vergleich wird nur der Vorher/Nachher-Zustand betrachtet, also spielt es keine Rolle, wie genau die Dateien hinzugefügt/entfernt wurden. Mit git log
vergleicht es jedoch paarweise Revisionen, so dass es immer nur entweder 'entfernt' oder 'hinzugefügt' sieht, nicht beides.
Wenn dies ein Problem ist, können Sie die Verwendung der Datei git rebase --interactive
in Betracht ziehen, um das Hinzufügen der Dateien wieder in die Revision einzufügen, die sie gelöscht hat. Dies kann jedoch unwanted side effects haben, wenn die Revisionen mit dem schlechten Verlauf bereits von anderen heruntergeladen wurden.
Danke - wie ich befürchtet – Ben
Ich habe die Dateien hinzugefügt und führte ein * git commit --amend *. Das Commit hat zu Konflikten geführt, die ich mit meins gelöst habe (d. H. Das * add * anstelle des * delete *). GitHub zeigt den Dateiverlauf nicht mehr an. Wird die Bewegung der Datei erkannt, wenn ich in andere Zweige ziehe? Wenn dem so ist, kann ich mit dem vorübergehenden Verlust der sichtbaren Dateihistorie leben. – Ben
Für Info: Ziehen in anderen Zweigen scheint nicht den sichtbaren Dateiverlauf wiederherzustellen. – Ben