Ich habe ein nacktes Repository, das als zentraler Speicher für mein Projekt verwendet wird. Alle Entwickler tun git clone <repo>
, um mit ihm zu teilen. Wenn sie den Klon ausführen, erhalten sie eine Überprüfung des Hauptzweigs (sofern dies nicht der Fall ist git clone -n
), da dieser repo.git/HEAD
enthält ref: refs/heads/master
, wodurch dieser zum aktiven Zweig wird .
Die Frage ist, wie ich den aktiven Zweig richtig ändere . Ich könnte die repo.git/HEAD
Datei einfach direkt hacken , aber das scheint böse und, na ja, hackig.
Ich habe es git checkout <otherbranch>
im Repo- .git
Verzeichnis versucht , aber das ist fehlgeschlagen, weil ich nicht in einem Arbeitsbaum war.
Ich habe versucht, git update-ref HEAD refs/heads/otherbranch
aber das hat gerade refs / Heads / Master so aktualisiert, dass es mit Refs / Heads / Otherbranch identisch ist (okay, ich habe das in einem Dummy-Repository gemacht, nicht in meinem Produktions-Repository!)
Ich habe es versucht git update-ref --no-deref HEAD refs/heads/otherbranch
und das hat fast funktioniert. Die HEAD
Datei wurde aktualisiert , aber auf SHA1 des Commits gesetzt, auf das von verwiesen wird refs/heads/otherbranch
.
Ich teste mit der Git-Version 1.7.0.2.msysgit.0
.
Ich vermute, es gibt keine Möglichkeit, dies zu tun git push
, da es ein bisschen unsicher (!) Scheint, allen und jedem zu erlauben, Ihren Standardzweig zu ändern, aber es gibt sicherlich einen besseren Weg, dies im Repo- .git
Verzeichnis zu tun, als die HEAD
Datei direkt zu hacken .
Antworten:
Wenn Sie Zugriff auf das Remote Bare Repo haben, schlägt dieser Artikel vor :
wie in der dokumentiert
git-symbolic-ref
Wenn Sie keinen Zugriff auf das Remote-Repo haben, lesen Sie meine vorherige Antwort .
Denken Sie daran, dass ein Befehl wie
git remote set-head
:ändert den Standardzweig des Remote- Repos nicht.
Es wird nur ein Remote-Tracking-Zweig geändert , der in Ihrem lokalen Repo als gespeichert ist
refs/remotes/<name>/HEAD
ändert sich nicht
HEAD
(wieder nurrefs/remotes/<name>/HEAD
), daher die Notwendigkeit fürgit symbolic-ref
.Also
git remote set-head
ist hier nicht die Antwort.git symbolic-ref HEAD
ist, wenn Sie direkten Zugriff auf das Remote-Repo haben.quelle
git symbolic-ref HEAD refs/heads/mybranch
hat gut funktioniert für mich! VIELEN DANK! ;)Um den Zweig zu ändern, müssen Sie den HEAD-Verweis auf den Zweig ändern, den Sie verwenden möchten.
Listen Sie zunächst alle Referenzen im Bare-Repository auf
Suchen Sie dann die Referenz für Ihre Branche. Das Format lautet wie folgt
refs/heads/<my_branch>
. Der nächste Schritt besteht darin, die aktuelle Referenz zu überprüfen. Geben Sie einfach Folgendes ein:Sie wissen also, welcher Zweig aktuell ist, und aktualisieren ihn dann nach Bedarf.
Das ist es. Genießen.
quelle
Wie ändere ich den aktiven Zweig richtig?
status: git checkout im repo .git-verzeichnis gibt fatal zurück: Dieser Vorgang muss in einem Arbeitsbaum ausgeführt werden
Tipps: Fügen Sie einfach das Argument --work-tree hinzu
Ausführliches Beispiel: Annahmen: Bare Git auf Remote-Server:
auf lokalem Server: Zweigversion erstellen.1.7 (unser anderer Zweig)
Git Branch Version.1.7
Git Push Origin Version.1.7
auf dem Remote-Server mit Git Bare Repo:
$ cd ~ / bare_git_repository.git
$ git branch
Version.1.7
Wie angegeben, folgender Befehl
Git Checkout Version.1.7
Rückkehr
fatal: Dieser Vorgang muss in einem Arbeitsbaum ausgeführt werden
Verwenden Sie den folgenden Befehl
Ändern Sie den aktiven Zweig erfolgreich
$ git branch
Meister
Überprüfen Sie die Ergebnisse wie folgt
hoffe es wird helfen
quelle
Wenn Sie keinen Zugriff auf das nackte Repository haben, führen
git remote set-head
Sie a aus, und Sie sind fertigSiehe diese vorherige Antwort
quelle
Ich habe auch ein nacktes Repo auf unserem Server und konnte erfolgreich Dateien mit abrufen
in ein neues lokales Repository, obwohl die Manpage angibt, dass dies nur für nicht nackte Repositorys gilt.
quelle
Ich habe zwei Verzeichnisse vor und nach der Bewerbung verglichen
git symbolic-ref HEAD refs/heads/mybranch
und es scheint, dass nur die Datei repo.git / HEAD geändert wurde, so dass es wahrscheinlich ziemlich sicher ist, die Datei nur zu "hacken".
quelle