Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
misc:git [2012/11/30 21:41] 84.56.1.83 angelegt |
misc:git [2016/05/19 12:19] (aktuell) skruppy [GIT] |
||
---|---|---|---|
Zeile 5: | Zeile 5: | ||
* http://git-scm.com | * http://git-scm.com | ||
* [[http://stackoverflow.com/questions/750172/how-do-i-change-the-author-of-a-commit-in-git|Author names ändern]] | * [[http://stackoverflow.com/questions/750172/how-do-i-change-the-author-of-a-commit-in-git|Author names ändern]] | ||
+ | * http://365git.tumblr.com | ||
+ | * http://theterrorists.org/~ben/cheat/git.png | ||
+ | * http://eagain.net/articles/git-for-computer-scientists/ | ||
+ | * http://salkuma.files.wordpress.com/2011/07/git-transport.png (workspace, index, remote, ... werlcher befehl arbeitet wo) | ||
+ | * https://github.com/ginatrapani/ThinkUp/wiki/Developer-Guide:-Get-the-Source-Code-from-GitHub-and-Keep-It-Updated/abbe99abacc7bb5623cdc075424514ffadac2b17 | ||
+ | * Sehr guter [[http://youtu.be/GYnOwPl8yCE|Vortrag]] ([[https://speakerdeck.com/pbhogan/power-your-workflow-with-git|Slides]]) | ||
+ | |||
Zubeginn ist alles leer (Working directory & Index): | Zubeginn ist alles leer (Working directory & Index): | ||
Zeile 169: | Zeile 176: | ||
size: 8 flags: 0 | size: 8 flags: 0 | ||
</code> | </code> | ||
+ | |||
+ | * Index ist immer über alle getrackten Dateien. \\ => Untracked files sind nicht im Index. \\ => Sie werden nicht committed. | ||
+ | |||
+ | |||
+ | <code> | ||
+ | $ cp old new | ||
+ | </code> | ||
+ | |||
+ | <code> | ||
+ | $ git rm old | ||
+ | rm 'old' | ||
+ | </code> | ||
+ | |||
+ | <code> | ||
+ | $ git add new | ||
+ | </code> | ||
+ | |||
+ | <code> | ||
+ | $ git status | ||
+ | # On branch master | ||
+ | # Changes to be committed: | ||
+ | # (use "git reset HEAD <file>..." to unstage) | ||
+ | # | ||
+ | # renamed: old -> new | ||
+ | # | ||
+ | # Untracked files: | ||
+ | # (use "git add <file>..." to include in what will be committed) | ||
+ | # | ||
+ | # unused | ||
+ | </code> | ||
+ | |||
+ | <code> | ||
+ | $ git commit -a -m "renaming" | ||
+ | [master 289cf21] renaming | ||
+ | 1 file changed, 0 insertions(+), 0 deletions(-) | ||
+ | rename old => new (100%) | ||
+ | </code> | ||
+ | |||
+ | * File moves werden nicht protokolliert, sondern on-demand heuristisch erkannt | ||
+ | |||
+ | * Ein Commit ist ein eingefrorener Index zustand (über alle getrackten Dateien/Ordner, egal ob geändert oder nicht) | ||
+ | * Da Index \ne Working copy sein kann, sind alle Dateien/Ordner im Index links auf GIT Objekte | ||
+ | |||
+ | ===== Wichtige Befehle ===== | ||
+ | ^ Befehl ^ Bedeutung ^ | ||
+ | | ''git add -p <file>'' | Wähle aus //welche// Änderungen in den Index sollen | | ||
+ | | ''git diff [<file>]'' | Working coppy VS. Index (of a file) | | ||
+ | | ''git diff --cached [<file>]'' | Index VS. HEAD (of a file) | | ||
+ | | ''git log [<file>]'' | Commit history (of a file) | | ||
+ | | ''git show <ID>'' | Commit message + diffs | | ||
+ | | ''git cat-file -p <ID>'' | Zeige GIT Objekte aus dem object strorre | | ||
+ | | ''git clone <URL>'' \\ ''git submodule init'' \\ ''git submodule update'' | Repo mit submodulen inizialisieren (clonen) \\ (submodule müssen extra explizit behandelt werden) | | ||
+ | |||
+ | ===== Dateistruktur ===== | ||
+ | ==== Objects ==== | ||
+ | ''/objects/<xx>/<xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>'' | ||
+ | |||
+ | Können entweder mit | ||
+ | for x in t s p ; do git cat-file -$x 3d646c3d1bf84007c93ab1d78e7f6941ef65bdc2 ; done | ||
+ | oder mit | ||
+ | perl -MCompress::Zlib -e 'undef $/; print uncompress(<>)' .git/objects/28/9cf21ee611ca2c335fa77f48f4613bd5255aa3 | ||
+ | angeschaut werden | ||
+ | |||
+ | ==== Refs ==== | ||
+ | ''/refs/'' | ||
+ | |||
+ | In Ordnern sind files die einen Hash enthalten. Somit Wird einem GIT object ein Name gegeben. | ||
+ | |||
+ | ''/HEAD'' | ||
+ | |||
+ | Referenz auf eine file in ''/refs''. Ist link auf den //aktuellen HEAD// des //aktuellen branches// und somit indirekt auf den letzten commit. | ||
+ | ==== Tags ==== | ||
+ | ''/refs/tags/<tag name>'' | ||
+ | |||
+ | <tag name> ist eine datei die den Hash eines der follgenden Objekte enthält | ||
+ | ^ Was ^ Tag typ ^ | ||
+ | | tag object | Annotiated Tag | | ||
+ | | blob object | Leightweight Tag | | ||
+ | | tree object | ::: | | ||
+ | | commit object | ::: | | ||
+ | |||
+ | * Ein tag object kann auf alle //4// Typen (auch tags selbst) wieder verweisen | ||
+ | * Nur annotiated tags können commitet werden (sie sind ja schließlich eigene objekte. Commits als tags könnten nicht vom commit selbst unterschieden werden) | ||
+ | * Annotiated Tags werden standartmäsig //nicht// committed (???) | ||
+ | * Annotiated tags sind zu bevorzugen, da dort u.a. auch der ersteller gespeichert wird. | ||
+ |