2016-10-26 1 views
0

Ich mache einen Auftrag für einen Kurs und es gibt ein automatisiertes Testsystem. Es testet Dateien in meinem Git-Repository, die ein bestimmtes Tag haben. Zum Beispiel mache ich eine mit den Dateien zu begehen:Ist es möglich, eine Datei von einem markierten Commit zu ändern?

main.cpp 
header1.h 
header2.h 
source1.cpp 
source2.cpp 

und ich sie mit dem Tag A1 markieren.

Nun, soweit ich weiß Tags sind verpflichtet zu commits und nicht zu den Dateien und wenn ich ein Tag hinzufügen geht es zu der letzten Commit, die ich gemacht habe. Wenn also ein automatisierter Testfall fehlschlägt und ich etwas in einer Datei ändern möchte, muss ich alle Dateien und das Tag löschen und sie dann erneut lesen und erneut eingeben, das alte Tag löschen und ein neues erstellen. Dies dauert ziemlich lange, da es viele verschiedene Testfälle gibt. Ich habe mich gefragt, ob es eine Möglichkeit gibt, eine Datei bei meinem letzten Commit zu ändern, damit ich nicht alle Dateien löschen und neu laden muss.

Wenn ich die obige Commit gemacht und sehe, dass ich einen Testfall fehlgeschlagen, würde ich alle Dateien löschen und löschen Sie das Tag und danach alle Dateien erneut und geben Sie ihnen ein neues Tag A1, so dass das Testsystem findet die aktualisierte Version. Gibt es eine Möglichkeit, eine Datei unter einem vorhandenen Tag zu ändern?

Antwort

2

In Git sind Commits unveränderlich, daher können sie nicht geändert werden. Und da ein Tag auf ein Commit verweist, kann diese Situation nur durch Verschieben des Tags behoben werden.

Zunächst müssen Sie nicht alle Dateien löschen; machen nur Änderungen, die Sie brauchen, und begehen wieder:

# edit files 
git add . 
git commit 

Dies ist eine neue auf dem aktuellen Zweig schaffen begehen (wahrscheinlich master).

Als nächstes, wie in How can I move a tag on a git branch to a different commit? beschrieben, bewegen Sie den tag:

git push origin :refs/tags/A1 
git tag -f A1 
git push origin --tags 

können Sie-Update erzwingen einen Tag wie diesen, aber Tags sind so konzipiert, nie, im Gegensatz zu Niederlassungen bewegen. Aus diesem Grund möchten Sie vielleicht Ihren Lehrer/Professor fragen, ob das Testsystem so eingerichtet werden kann, dass es einen bestimmten Zweig statt eines Tags erstellt. Dann könnten Sie dies stattdessen tun:

git checkout master 
# do work, commit, push 
# when ready to test: 
git checkout A1 # now a branch 
git merge --ff-only master 
git push origin A1 
Verwandte Themen