Bewahren git --assume-unchanged-Dateien zwischen branch Auschecken
Habe ich mit git --assume-unchanged yacs/settings/development.py
ignorieren meiner lokalen Datenbank-Konfigurations-Datei in mein dev Zweig. Aber wenn ich wechseln wollen, Zweige (für die Bereitstellung), bekomme ich eine Fehlermeldung, dass ich noch änderungen angemeldet:
% git checkout production
error: Your local changes to the following files would be overwritten by checkout:
yacs/settings/development.py
Please, commit your changes or stash them before you can switch branches.
Aborting
Was ärgerlich ist. Der einzige Weg, ich weiß, wie dies zu umgehen wäre zu stash es:
% git stash
% git checkout production
% git merge dev
% ./deploy.sh
% git checkout dev
% git stash pop
# On branch dev
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: yacs/settings/development.py
#
Aber jetzt geht es wieder in den index wieder (pfui)! Gibt es eine bessere alternative zu diesem workflow?
[Ich weiß nicht besonders kümmern, wenn die lokalen änderungen bleiben lokal (aka, es ist ok, wenn es die Produktion branch), ich möchte nur nicht, dass es geschoben, um einen remote-repository.]
- dies funktioniert nicht für mich. Füge ich die Datei mit --skip-worktree und git status nicht zeigen. Allerdings bin ich noch nicht in der Lage, wechseln Sie zu einem anderen Zweig. Was bin ich?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie versuchen (git update-index man-Seite):
Jedoch, wie bereits erwähnt in "git übernimmt unverändert vs überspringen worktree":
Plus, stellen Sie sicher, dass Git verwenden, 2.24 (Q4 2014).
Seit 2012 (die OP ' s Frage), git-stash wurde portiert C (es ist nicht länger ein shell-script), aber es hatte (in seiner neuen Umsetzung) zu (re-)lernen, zu schreiben aktualisiert den index zurück auf die Festplatte.
Sehen commit 34933d0 (11 Sep 2019) von Thomas Gummerer (
tgummerer
).(Zusammengefasst von Thomas Gummerer --
tgummerer
-- in commit 34933d0, 20 Sep 2019)Beim konvertieren stash in C, Anrufe auf '
git update-index --refresh
'ersetzt wurden Sie durch die '
refresh_cache()
" - Funktion.Das ist gut, solange der index wird nur benötigt,-Kern, und nicht wieder von Platte gelesen.
--assume-unchanged
und--skip-worktree
beide Klagen weiterhin über vorläufige änderungen an der Datei, wenn ich versuche zu wechseln lokalen Niederlassungen nach dem einstellen dieser Eigenschaft.your_repo\.git\info\exclude
?--assume-unchanged
und--skip-worktree
aber noch immer dieselbe Fehlermeldung. Irgendwelche Ideen?git rm --cached -- afile
in beiden Zweigen, wie in stackoverflow.com/a/29549545/6309), und, wenn möglich, generiert seine Inhalte über ein content-filter-Treiber, wie in stackoverflow.com/a/45025658/6309.Was ich begonnen habe, zu tun, ist das erstellen eines branch aus master-privat genannt, dass hat meine lokalen änderungen; betrachten Sie es als proxy-Zweig zwischen meiner Arbeit und Zweig master. Ich kann rebase meine aktuelle Arbeit-Zweig gegen die private, wenn ich meine lokalen änderungen, die nur und ich habe ein paar Aliase in meine .gitconfig, die automatisieren, halten private up-to-date mit master. Wenn ich merge to master, meine Aliase stellen Sie sicher, dass rebase --auf master private meine Arbeit Zweig zuerst.
Ich veröffentlichte einen blog-Eintrag über diese im detail hier http://blog.ericwoodruff.me/2013/02/git-private-branch-pattern.html
Die Lösung, die für mich gearbeitet war, verwenden Sie --skip-worktree. Jedoch, wie einige oben, ich kämpfte mit dem Schalter zwischen ein Ticket Niederlassung und der Hauptniederlassung ohne git beschweren, auch nachdem ich eingestellt hatte das --skip-worktree Flagge auf die Datei, deren änderungen, die ich wollte bleiben lokal.
Wie es scheint, Sie laufen in dieses Problem, wenn Sie änderungen an der lokalen Datei vor dem ausführen der --skip-worktree, das ist, was mir passiert ist.
Einen workaround, oben, fügen Sie die Datei
your_repo/.git/info/exclude
. Aber ich wollte nicht, um die Datei auf der exclude-Liste, so habe ich die folgenden aus meiner Arbeit tree directory:cp <local-only_file> ~/
git checkout <local-only_file>
git update-index --skip-worktree -- <local-only_file>
cp ~/<local-only_file> .
git diff
<local-only_file>
enthalten sind, in der push -dieses Problem geschieht, wenn die übersprungene Datei ist nicht dieselbe wie die, die in der Filiale sind, versuchen zur Kasse oder die, die Sie versuchen zu ziehen.