10 Stimmen

Automatisches Verstauen

Der Abschnitt Das letzte Glied in der Kette: Stashing und der Reflog en http://ftp.newartisans.com/pub/git.from.bottom.up.pdf empfiehlt, häufig Schnappschüsse von der laufenden Arbeit zu machen. Der Autor geht sogar so weit, zu empfehlen, dass Sie einen Cron-Job verwenden können, um Ihre Arbeit regelmäßig zwischenzulagern, ohne sie manuell zwischenlagern zu müssen.

Das Schöne an stash ist, dass es Ihnen eine unaufdringliche Versionskontrolle für Ihre Arbeits Arbeitsprozess selbst, d. h. die verschiedenen Phasen Ihres Arbeitsbaums von Tag zu Tag. Sie können sogar stash sogar regelmäßig verwenden, wenn Sie wollen, etwa mit dem folgenden Snapshot-Skript:

$ cat <<EOF > /usr/local/bin/git-snapshot
#!/bin/sh
git stash && git stash apply
EOF
$ chmod +x $_
$ git snapshot

Es gibt keinen Grund, warum Sie dies nicht stündlich über einen Cron-Job ausführen könnten, zusammen mit dem Befehl reflog expire, der jede Woche oder jeden Monat ausgeführt wird.

Das Problem bei diesem Ansatz ist:

  1. Wenn es keine Änderungen an Ihrer Arbeitskopie gibt, wird der Befehl "git stash apply" dazu führen, dass Ihr letzter Stash auf Ihre Arbeitskopie angewendet wird.
  2. Zwischen der Ausführung des Cron-Jobs und der Arbeit des Benutzers an der Arbeitskopie kann es zu Wettlaufsituationen kommen. Zum Beispiel wird "git stash" ausgeführt, dann öffnet der Benutzer die Datei, dann wird "git stash apply" des Skripts ausgeführt.

Hat jemand einen Vorschlag, wie man dieses automatische Verstecken zuverlässiger machen kann?

0 Stimmen

Ihr Link oben ist defekt. Die Url lautet: newartisans.com/2008/04/git-from-the-bottom-up.html

0 Stimmen

SO lässt mich meinen Kommentar nicht löschen, aber ich habe mich geirrt. Der Link lautet eigentlich ftp.newartisans.com/pub/git.von.unten.nach oben.pdf

13voto

Greg Hewgill Punkte 882617

Ich würde auf keinen Fall eine automatische Speicherung einrichten, wie sie in diesem (ansonsten ausgezeichneten) Artikel beschrieben wird, und zwar aus genau den von Ihnen genannten Gründen.

Ich ziehe es vor, das Versteck so zu nutzen, wie es vorgesehen ist, d. h. ich speichere absichtlich und wende Änderungen während der Arbeit an. Für regelmäßige Backups verwende ich eine geeignete Backup-Lösung. Meiner Meinung nach ist Git kein Ersatz für eine Backup-Lösung.

9voto

d0k Punkte 2565

Git stash ist eigentlich nur ein kleines Shell-Skript, das einen Commit erstellt, der in keinem Branch referenziert wird. Sie könnten dieses Verhalten ohne Race Conditions emulieren:

#!/bin/sh
GIT_DIR=$(git rev-parse --git-dir) || exit
ref_stash=refs/stash

w_commit=$(git stash create) # creates a commit for the wip

# gather some info
head=$(git log --no-color --abbrev-commit --pretty=oneline -n 1 HEAD --)
branch=$(git symbolic-ref -q HEAD)
branch=${branch#refs/heads/}
msg=$(printf 'WIP on %s: %s' "$branch" "$head")

# Make sure the reflog for stash is kept.
: >>"$GIT_DIR/logs/$ref_stash"

git update-ref -m "$msg" $ref_stash $w_commit

Das Skript muss vielleicht noch etwas aufpoliert werden, aber ich hoffe, Sie verstehen die Idee :)

3voto

Philippe Punkte 24052

Für meinen persönlichen Gebrauch (ich arbeite seit 3 Jahren damit) habe ich diese Zeile in der Alias-Konfigurationssektion hinzugefügt:

s = !sh -c \"git stash save | grep 'No local changes to save' && git $* || (git $* && git stash pop) \"

Dann kann ich jeden Git-Befehl mit Auto-Stashing ausführen, indem ich einfach ein 's' davor setze. In deinem Fall also : git s snaspshot

Vielleicht ist es zu spät, aber ich hoffe, es wird eines Tages jemandem helfen...

2voto

Daniel Fanjul Punkte 3453

Ich bevorzuge die Verwaltung von Zweigstellen vor der Verwaltung von Vorräten: Sehen Sie sich das an aquí

0voto

Art Punkte 22351

Für die Datensicherung würde ich einen Online-Backup-Service empfehlen, ähnlich wie dropbox.com. Sie brauchen buchstäblich nichts zu tun, es werden einfach alle Änderungen, die Sie im Laufe des Tages vornehmen, für Sie gespeichert.

Ich habe es für alle meine Git-Repositories aktiviert, was mir hilft, mich auf die eigentliche Aufgabe zu konzentrieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X