intelligentes diff

Maximilian Wilhelm max at rfc2324.org
Mo Aug 6 12:42:40 CEST 2007


Am Monday, den  6 August hub Frank Loeffler folgendes in die Tasten:

Hi!

> Verschobene Dateien und Verzeichnisse wird wohl keine Versionskontrolle
> von sich aus erkennen, wenn Du das nicht mit deren Bordmitteln machst.

Das stimmt nicht.

> Da kann sie svn, darcs, git oder sonstwie heissen. Sie muesste ja
> schliesslich bei 'verlorengegangenen' Dateien deren alte Version mit
> allen anderen im Pfad vergleichen, die noch nicht aufgenommen wurden
> ect. und das waere doch recht ineffizient fuer normale Arbeitsweise.

Git benutzt SHA-Hashes zur Identifikation der Dateien.
Damit ist das einfach.

> D.h. nimm das naechste Mal einfach das System Deiner Wahl.

max at pandora:~/test$ git-init-db 
Initialized empty Git repository in .git/
max at pandora:~/test$ ls
max at pandora:~/test$ cp /etc/passwd .
max at pandora:~/test$ git-add passwd 
max at pandora:~/test$ git commit -m "passwd"
Created initial commit 68783d4: passwd
 1 files changed, 37 insertions(+), 0 deletions(-)
 create mode 100644 passwd
max at pandora:~/test$ ls
passwd
max at pandora:~/test$ mkdir testdir
max at pandora:~/test$ cd testdir/
max at pandora:~/test/testdir$ mv ../passwd wasauchimmer
max at pandora:~/test/testdir$ cd ..
max at pandora:~/test$ ls
testdir
max at pandora:~/test$ git status
# On branch master
# Changed but not updated:
#   (use "git add/rm <file>..." to update what will be committed)
#
#       deleted:    passwd
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       testdir/
no changes added to commit (use "git add" and/or "git commit -a")
max at pandora:~/test$ git-rm passwd
rm 'passwd'
max at pandora:~/test$ git-add testdir/\*
max at pandora:~/test$ ls
testdir
max at pandora:~/test$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       renamed:    passwd -> testdir/wasauchimmer
#
max at pandora:~/test$

Nein, die Datei wurde nicht mit 'GIT tools' verschoben.

Ja, man muss verschobene Dateien per Hand git-rm'en, aber das laesst sich
anhand der Ausgabe von 'git status' automatisieren (think: | while read ...)
Alle neuen Dateien in den Index aufnehmen geht mit einem 'git-add \*'

Mit diesen beiden Befehlen hast Du dann eine recht zuverlässige
Übersicht, was Du angestellt hast.
Das klappt natürlich nur, wenn Du die Dateien nicht gleichzeitig noch
geändert hast, da sonst die SHA-Summen nicht mehr stimmen.

> Wenn Du die Aenderungen nun aber schonmal gemacht hast und sie eben
> nicht mit irgendeinem System aufgezeichnet hast, kannst Du immerhin diff
> fuer nicht umbenannte Dateien und Werkzeuge wie fdupes fuer das Finden
> von umbenannten, aber ansonsten unveraenderten Dateien nehmen, aber wenn Du
> die Dateien geaendert und umbenannt/verschoben hast, musst Du wohl doch
> wieder selbst Hand anlegen. Jedenfalls ist mir da nicht bekannt.

Ciao
Max
-- 
	Follow the white penguin.