Sie verwenden bereits Quellcodeverwaltung, um Ihren Code zu verwalten, richtig? Möglicherweise verwenden Sie sogar Ihren SCM als zentralen Bestandteil Ihres Workflows, wie wir es bei New Relic tun.
In diesem Artikel werden die Grundlagen der Quellcodeverwaltung nicht überprüft, unabhängig davon, welche Sie verwenden. Nehmen wir an, Sie wissen bereits, wie Sie sich fortbewegen. Wir werden darauf eingehen, wie die Profis mit Git arbeiten. Wir werden uns einige der erweiterten Funktionen und Workflows ansehen, mit denen Sie möglicherweise noch nicht vertraut sind. Hoffentlich werden Sie mit den ungeheuren Möglichkeiten, die GIT Ihnen bietet, den Mund aufhalten!
Wenn Sie wie ich sind, erkunden Sie gerne, wie andere Entwickler arbeiten.
Für den Laien oder diejenigen, die von einem anderen SCM stammen, ist Git ein verteiltes Versionskontrollsystem. Es ist kostenlos und Open Source, hat einen kleinen Footprint und kann in den Workflow passen, der am besten zu Ihnen passt. Im Allgemeinen sind Sie nicht dazu gezwungen, auf eine bestimmte Art und Weise zu arbeiten. Dies bedeutet, dass es viele verschiedene Methoden gibt, wie sie ihre Funktionen verwenden können, z. B. Staging-Bereiche, Verzweigungen und Tagging-Releases. Wenn Sie wie ich sind, erkunden Sie gerne, wie andere Entwickler arbeiten. Machen Sie sich also bereit, Ihre Änderungen vorzunehmen .gitconfig
, weil du Lust auf eine Überraschung hast. Mal sehen, wie die Profis mit Git arbeiten.
Sie kennen wahrscheinlich das versehentliche Ändern einer einzelnen Datei aus zwei verschiedenen Gründen, ohne sich zwischendurch zu verpflichten.
Sie sind sicherlich vertraut mit dem Hinzufügen von Dateien zum Staging-Bereich mit dem entsprechend benannten hinzufügen
Befehl. Und Sie sind wahrscheinlich damit vertraut, eine einzelne Datei aus zwei verschiedenen Gründen versehentlich zu ändern, ohne sich dazwischen zu verpflichten. So haben Sie sicher eine Git Log
gefüllt mit Meldungen wie "X bearbeiten und nicht verbundenes Y ändern". Wenn dies nach Ihrem Workflow klingt, ist das interaktive Hinzufügen Ihr neuer bester Freund.
Durch interaktives Hinzufügen oder Hinzufügen eines Patches werden Sie Schritt für Schritt durch Ihre Änderungen geführt. Wenn Sie eine Datei mit der -p
Wenn Sie den Befehl ausführen, werden Sie bei jeder logischen Änderung aufgefordert (d. h., nacheinander bearbeitete Zeilen werden gruppiert). Es gibt eine Reihe von Optionen, die Sie für jedes Stück auswählen können, z. B. das Aufteilen des aktuellen Stücks in kleinere, das Überspringen eines Stücks oder das manuelle Bearbeiten. Verwenden Sie die ?
Option, um eine vollständige Liste der Befehle anzuzeigen.
Der Einstieg in das Staging von Hunks ist so einfach wie folgt:
git add -p
Wenn Sie als Codierungsbürger auf etwas stoßen, das eine schnelle Korrektur oder Bereinigung erfordert, sollten Sie sich wahrscheinlich einen Moment Zeit nehmen, um es zu ändern. Wenn Sie jedoch einen umfangreichen Workflow für Feature-Zweige verwenden, möchten Sie nicht, dass diese Fixierung nicht in Ihrem Feature-Zweig enthalten ist. Dies bedeutet, dass Sie müssen stash
Ändern Sie Ihre aktuellen Änderungen, und wechseln Sie zu Ihrem Hauptzweig. Das Springen zwischen den Zweigen kann langwierig sein, aber zum Glück gibt es eine kurze Abkürzung, um zu Ihrem letzten Zweig zu wechseln. (via Zach Holman)
git checkout -
Diese Syntax sollte * NIX-Benutzern recht vertraut sein. Das CD
Befehl hat eine ähnliche Verknüpfung (CD -
), das zum letzten Verzeichnis springt, in dem Sie sich befanden. Sie müssen sich nie daran erinnern, wie Sie diesen Funktionszweig benannt haben, wenn Sie zurückwechseln müssen. gerade git checkout -
.
Wenn Sie mit Feature-Zweigen arbeiten, können Sie schnell so viele erstellen, dass die Ausgabe von überladen wird Git-Zweig - Liste
. Hin und wieder möchte man die Äste loswerden, die es zum Meister gemacht haben. Aber Sie haben wahrscheinlich eine kurze Pause vor sich Git-Zweig -d
, Mit den folgenden Befehlen können Sie sie jedoch ohne Bedenken löschen. (via Zach Holman)
Wenn Sie sehen möchten, welche lokalen Zweigstellen Sie in der Zweigstelle, in der Sie sich gerade befinden, zusammengeführt haben, dann brauchen Sie nur noch:
Git-Zweig -
Die Rückseite ist auch verfügbar. Zeigen Sie an, welche Zweige nicht mit dem aktuell ausgewählten Zweig zusammengeführt wurden:
Git-Zweig - nicht zusammengeführt
Mash dies mit ein paar einfachen UNIX-Tools und Sie können alles, was bereits zusammengeführt wurde, schnell löschen:
Git Zweig --merged | xargs git branch -d
Nehmen wir an, Sie experimentieren mit einigen Refactorings und haben einige Äste, an denen Sie verschiedene Änderungen vorgenommen haben. Wenn Sie Änderungen an einer Datei in einem entfernten Zweig vorgenommen haben, die Sie in Ihren aktuellen Arbeitszweig einfügen möchten, können Sie eine beliebige Anzahl von Schritten ausführen. Ohne den untenstehenden Tipp würden Sie wahrscheinlich Ihre aktuellen Änderungen verwahren, die Zweige wechseln und den zu ändernden Dateiinhalt mitnehmen git checkout -
natürlich) und nehmen Sie Ihre Änderungen vor. Oder Sie können einfach nur die Datei auschecken, die sie (über Zach Holman) in Ihren aktuellen Zweig einfügt:
git checkout-- Pfad / zu / Datei.rb
Sie haben also die überfüllte Zweigliste, über die wir zuvor gesprochen haben. einige von denen, die Sie mit dem aufgeräumt haben --verschmolzen
Flagge. Aber was ist mit all den anderen Zweigen? Woher wissen Sie, welche nützlich oder völlig veraltet sind? Das for-each-ref
Der Befehl gibt für jeden Zweig eine Liste aus und zeigt die Referenzinformationen für den letzten Commit an. Wir können die Ausgabe so anpassen, dass sie nützliche Informationen enthält, aber noch wichtiger ist, dass wir die Liste nach Datum sortieren können. Dieser Befehl gibt uns eine Liste von Verzweigungen mit der letzten Commit-Nachricht und dem Committer, sortiert in absteigender Datumsreihenfolge. (via Rein Henrichs)
git for-each-ref --sort = -committerdate --format = '% (committerdate: short)% (refname: short) [% (committername)]'
Während Sie diesen Befehl jedes Mal eingeben können, empfehle ich dringend, ihn als Alias zu verwenden und sich einige ernsthafte Kopfschmerzen zu ersparen.
git config --global alias.latest "for-each-ref --sort = -committerdate --format = '% (committerdate: short)% (refname: short) [% (committername)]'"
Oder zumindest sollten sie nicht verwenden git schuld
ohne eine der Optionsflaggen unten. Git Schuld ist mächtig; Es ist im Grunde so, als würde man mit der Wissenschaft beweisen, dass man Recht hat. Aber seien Sie vorsichtig, viele Änderungen sind oberflächlich und die Suche nach der Quelle des fraglichen Codes erfordert etwas mehr Jagd. Dinge wie das Entfernen von Leerzeichen, das Verschieben von Text in neue Zeilen oder sogar das Verschieben von Text aus einer anderen Datei können ignoriert werden, um den ursprünglichen Autor des Codes wesentlich einfacher zu erreichen.
Bevor du jemanden beschuldigst, solltest du eines davon überprüfen:
git blame -w # ignoriert Leerzeichen git blame -M # ignoriert das Verschieben von Text git blame -C # ignoriert das Verschieben von Text in andere Dateien
Von Zeit zu Zeit müssen Sie eine Zeile Code suchen, von der Sie wissen, dass Sie sie geschrieben haben, die Sie aber nicht finden können. Es könnte in einem entfernten Ast stecken, vor langer Zeit gelöscht werden oder sich in einer einfachen Umgebung verstecken. Sie können jedoch in jedem Fall eine beliebige Zeichenfolge in Ihrem gesamten Git-Verlauf finden, indem Sie einige Befehle zusammenfassen. Zuerst werden wir eine Liste aller Commits erhalten und dann jedes für unsere Zeichenfolge festlegen.
git rev-list - all | xargs git grep -F ''
Sie haben wahrscheinlich einen Freund, der versehentlich vertrauliche Daten an ein Repo übermittelt hat: Zugangsschlüssel, Passwörter, das geheime Marinara-Rezept Ihrer Großmutter. Als Erstes sollten sie ihre Passwörter ändern und den Zugriff mit diesen Schlüsseln widerrufen (und sich bei Ihrer Großmutter entschuldigen). Als Nächstes sollten Sie die fehlerhafte Datei aufspüren und aus dem gesamten Git-Verlauf entfernen, was viel einfacher klingt als es tatsächlich ist. Nachdem dieser Vorgang abgeschlossen ist, werden bei allen bereinigten Änderungen auch die vertraulichen Daten entfernt. Gabeln Ihres Repos, die Ihre Upstream-Änderungen nicht zusammenführen, enthalten immer noch die gefährdeten Dateien (überspringen Sie also nicht das Ändern von Kennwörtern und das Sperren von Zugriffsschlüsseln)..
Zuerst schreiben wir den Git-Verlauf für jeden Zweig neu und entfernen die Datei mit den vertraulichen Daten.
git filter-branch --index-filter 'git rm --cached --ignore-unmatch'--prune-empty --tag-name-filter cat - --all
Fügen Sie die Datei zu hinzu .Gitignore
und verpflichten sich zu aktualisieren .Gitignore
.
Echo>> .gitignore git add .gitignore git commit -m "Add sensitive Datei in gitignore "
Da wir die Historie neu schreiben, müssen Sie die Änderungen an Ihrer Fernbedienung erzwingen.
git push herkunft master --force
Die gefährdeten Dateien sind immer noch in Ihrem lokalen Repo vorhanden. Sie müssen daher einige Bereinigungsaufgaben ausführen, um sie vollständig zu löschen.
rm -rf .git / refs / original / git reflog verfällt --expire = now --all git gc --prune = jetzt git gc --aggressive --prune = now
Das Repo Ihres Freundes sollte frei von sensiblen Daten sein, und Sie werden der Held, wenn Sie ihm mit Ihrem Wissen helfen. (über StackOverflow und GitHub)
Wenn Sie mit dem Code einer anderen Person in Ihrer Umgebung arbeiten, müssen Sie eine beliebige Anzahl von Konfigurationsänderungen vornehmen, um die Anwendung auszuführen. Es ist zu einfach, versehentlich eine Änderung an den Konfigurationen vorzunehmen, die ausschließlich für Ihre Umgebung gedacht waren. Anstatt also immer nach diesen Dateien Ausschau zu halten und sie im "geänderten" Staging-Bereich zu verweilen, können Sie einfach den git-Index anweisen, Änderungen an dieser Datei zu ignorieren. Sie können sich das etwas wie eine git-ignorierte Datei vorstellen, die beim Repo bleibt. (über Arnaud Coomans)
git Update-Index --assume-unverändert
Manchmal ist es von Anfang an genau das, was Sie aus verschiedenen Gründen tun müssen. Vielleicht haben Sie eine Codebase geerbt, von der Sie nicht sicher sein können, dass sie für Open Source sicher ist. Vielleicht probieren Sie einfach etwas völlig Neues aus, oder Sie fügen einen Zweig hinzu, der einem separaten Zweck dient, den Sie mit dem pflegen möchten Repo (wie GitHub Pages). Für diesen Fall gibt es eine sehr einfache Möglichkeit, einen neuen Zweig in Ihrem Repo zu erstellen, der im Wesentlichen keinen Verlauf hat. (via Nicola Paolucci)
Git-Kasse - Morphan
Verschwenden Sie keine Zeit mehr mit der Eingabe langer Befehle und machen Sie sich ein paar nützliche Aliase.
Keine Diskussion über Git wäre vollständig, ohne über verschiedene Aliasnamen zu sprechen, die Ihnen buchstäblich Minuten erspart, die Sie durch gespeicherte Tastenanschläge erhalten. Verschwenden Sie keine Zeit mehr mit der Eingabe langer Befehle und machen Sie sich ein paar nützliche Aliase. Aliase können erstellt werden, indem Sie sie Ihrer .gitconfig-Datei hinzufügen oder die Befehlszeile verwenden git config - globaler Alias.
. Nachfolgend finden Sie nur ein Beispiel für einen Alias, den Sie als Sprungbrett für Ideen verwenden können.
co: Mit einem Funktionszweig-Workflow bewegen Sie sich regelmäßig zwischen den Zweigen. Sparen Sie sich jedes Mal sechs Zeichen.
co = Kasse
ds: Es ist immer empfehlenswert, die Änderungen zu überprüfen, bevor Sie die eigentliche Festschreibung vornehmen. Auf diese Weise können Sie Tippfehler erkennen, versehentliches Einfügen sensibler Daten und Gruppieren von Code in logischen Gruppen. Stellen Sie Ihre Änderungen in Szene und verwenden Sie dann git ds
um den Unterschied dieser Änderungen zu sehen.
ds = differ --staged
st: Sie sollten mit der ausführlichen Ausgabe des Git-Status ziemlich vertraut sein. Irgendwann sollten Sie die Formalitäten überspringen und zur Sache gehen. Dieser Aliasname zeigt die Kurzform des Status und enthält die Zweigdetails.
st = status -sb
ändern: Haben Sie vergessen, eine Datei mit Ihrem letzten Commit einzureichen, oder haben Sie vielleicht eine Änderung vorgenommen, die Sie vornehmen mussten? Passen Sie die gestaffelten Änderungen an Ihrem letzten Commit an.
change = Commit --amend -C HEAD
rückgängig machen: Manchmal reicht es nicht aus, das letzte Commit zu ändern, und Sie müssen es stattdessen rückgängig machen. Dieser Alias wird einen Commit zurücktreten und die Änderungen an diesem Commit gestoppt lassen. Jetzt können Sie weitere Änderungen vornehmen oder mit einer neuen Nachricht erneut festlegen.
undo = reset --soft HEAD ^
ls: Um mit einer Gruppe von Entwicklern an einer Codebase zu arbeiten, müssen Sie versuchen, auf dem Laufenden zu bleiben, woran die Leute arbeiten. Dieser Alias stellt ein einzeiliges Git-Protokoll mit Datum und Committer-Namen bereit.
ls = log --pretty = format: "% C (gelb)% h% C (blau)% ad% C (rot)% d% C (zurücksetzen)% s% C (grün) [% cn]" - decorate --date = kurz
aufstehen: Dieser Alias ist ideal, um zu überprüfen, woran Sie gestern für jede Art von täglichem Standup gearbeitet haben, oder um Ihr Gedächtnis morgens aufzufrischen.
standup = log --seit 'vor 1 Tag' --oneline --author
Graph: Eine komplexe Git-Geschichte kann in gerader Linie nur schwer überprüft werden. Die Verwendung des Diagrammflags zeigt Ihnen, wie und wann Commits zum aktuellen Zweig hinzugefügt wurden.
graph = log --graph --pretty = format ':% C (gelb)% h% Cblue% d% Creset% s% C (weiß)% an,% ar% Creset'
Git kann sowohl erstaunlich einfach als auch unglaublich komplex sein. Sie können mit den Grundlagen beginnen und sich im Laufe der Zeit in eine komplexere Diagrammmanipulation einarbeiten. Es ist nicht nötig, alles zu verzehren, bevor Sie es verwenden können. Der Befehl, der am stärksten sein wird, wenn Sie lernen, ist Mann Git-
. Versuchen Sie es zu verwenden, bevor Sie sich an Google wenden, um eine Antwort zu erhalten.
Sie können mehr darüber erfahren, wie das Unternehmen, in dem ich für Sie arbeite, New Relic, git in unserem Blog verwendet, oder New Relic Pro kostenlos testen. Danke fürs Lesen! Wenn Sie Fragen haben, lassen Sie es uns wissen!