Wie setze ich die HEAD-Referenz einer Git-Fernbedienung so, dass sie auf etwas anderes als "master" verweist?
Mein Projekt hat die Richtlinie, keinen "Master" -Zweig zu verwenden (alle Zweige müssen aussagekräftige Namen haben). Darüber hinaus ist das kanonische Master-Repository nur über ssh: // ohne Shell-Zugriff zugänglich (wie GitHub oder Unfuddle).
Mein Problem ist, dass das Remote-Repository immer noch einen HEAD-Verweis auf refs / Heads / Master hat, aber ich brauche ihn, um auf einen anderen Zweig zu verweisen. Dies verursacht zwei Probleme:
Beim Klonen des Repos gibt es dies,
Warnung: Remote-HEAD bezieht sich auf eine nicht vorhandene Referenz, die nicht ausgecheckt werden kann.
Das ist verwirrend und unpraktisch.
Der webbasierte Codebrowser hängt von HEAD als Grundlage für das Durchsuchen des Baums ab. Dann muss HEAD auf einen gültigen Zweig verweisen.
quelle
Antworten:
Vor einem Jahr gab es auf GitHub fast dieselbe Frage .
Die Idee war, den Hauptzweig umzubenennen:
(ein "
git-symbolic-ref HEAD refs/head/published
" würde nicht an das Remote-Repo weitergegeben)Dies ähnelt " Wie lösche ich Origin / Master in Git ".
Wie in diesem Thread gesagt : (Hervorhebung von mir)
(Das ist der springende Punkt Ihrer Frage, ich weiß;))
Vielleicht wäre der einzige Weg eine "Veröffentlichung für die Armen" , wo Sie:
Dies würde jedoch einen Schreibzugriff auf den Server beinhalten, was nicht immer möglich ist.
Wie ich in " Git: Richtige Methode zum Ändern von Active Branch in einem nackten Repository?" " ,
git remote set-head
würde sich am Remote-Repo nichts ändern.Es würde nur den Remote-Tracking-Zweig ändern, der lokal in Ihrem lokalen Repo gespeichert ist
remotes/<name>/HEAD
.quelle
-f
(--force
) vergessen habe . Ich habe die Antwort entsprechend bearbeitet. Wenn Sie dann antworten, verwendet Ihre Referenz dieselbe Option.Aktualisieren: Dies funktioniert nur für die lokale Kopie des Repositorys (den "Client"). Bitte beachten Sie die Kommentare anderer unten.
Mit einer aktuellen Version von git (Februar 2014) wäre das richtige Verfahren:
git remote set-head $REMOTE_NAME $BRANCH
Zum Beispiel wäre das Umschalten des Kopfes auf Remote
origin
zu Branchdevelop
:git remote set-head origin develop
quelle
git checkout -b default; git push origin HEAD; git remote set-head origin default
. Sie können dann die lokalen Änderungen mitcat .git/refs/remotes/origin/HEAD
(sollte es seinref: refs/remotes/origin/default
) und das Fehlen von Remote-Änderungen mit überprüfengit remote show origin
(es wird immer noch das sein, was es war, bevor Sie den Standardzweig hinzugefügt haben).Da Sie GitHub erwähnen, gehen Sie einfach in Ihr Projekt, um es auf ihrer Website zu tun, dann ...
admin > Default Branch > (choose something)
Getan.
quelle
Sehen: http://www.kernel.org/pub/software/scm/git/docs/git-symbolic-ref.html
Dadurch wird der Standardzweig im Git-Repository festgelegt. Sie können dies in nackten oder gespiegelten Repositorys ausführen.
Verwendung:
quelle
(Es gab schon grundsätzlich die gleiche Frage " Erstellen Sie einen symbolischen Git-Ref im Remote-Repository ", die keine universelle Antwort erhielt.)
Es gibt jedoch spezifische Antworten für verschiedene Git- "Farmen" (in denen mehrere Benutzer Git-Repos über eine eingeschränkte Schnittstelle verwalten können: über http und ssh): http://Github.com , http://Gitorious.org , http: / /repo.or.cz , Girar ( http://git.altlinux.org ).
Diese spezifischen Antworten können für diejenigen nützlich sein, die diese Seite lesen und über diese spezifischen Dienste nachdenken.
$ ssh git.alt help | fgrep branch default-branch <path to git repository> [<branch>] $
Zum Beispielssh git.alt default-branch packages/autosshd.git sisyphus
, um den HEAD im Remote-Repo soautosshd.git
zu ändern , dass er auf densisyphus
Zweig zeigt.quelle
Wenn Sie von einer Shell aus auf das Remote-Repo zugreifen können, gehen Sie einfach in die .git-Datei (oder in das Hauptverzeichnis, wenn es sich um ein nacktes Repo handelt) und ändern Sie die HEAD-Datei so, dass sie auf den richtigen Kopf zeigt. Beispielsweise enthält es standardmäßig immer 'refs: refs / Heads / Master'. Wenn Sie jedoch stattdessen foo als HEAD benötigen, bearbeiten Sie einfach die HEAD-Datei und ändern Sie den Inhalt in 'refs: refs / Heads / foo'.
quelle
myrepo.git
. Der Inhalt der HEAD-Datei im angegebenen Verzeichnis wurde vonref: refs/heads/master
nach geändertref: refs/heads/mainline
. Wenn ich jetzt versuche, das Repository auf meiner lokalen Box zu klonen, zeigt es immer noch auf Master. Ich habe dasgit clone ssh://[email protected]/myrepo
Kommando ausgeführt. Irgendeine Idee für ein solches Verhalten?git version 1.7.1
& Git-Client-Version:git version 1.9.4.msysgit.2
Sie können einen freistehenden erstellen Master Zweig nur Porzellan Git Befehl:
Die uns einen gibt Master - Zweig mit einem unfreundlichen Nachricht (Sie höflicher sein wollen). Jetzt erstellen wir unseren "echten" Zweig (nennen wir ihn zu Ehren von SVN Trunk ) und scheiden ihn vom Master :
Hey, Presto! gitk --all zeigt Master und Trunk ohne Verbindung zwischen ihnen.
Die "Magie" hier ist, dass --amend bewirkt , dass git commit ein neues Commit mit demselben übergeordneten Element wie der aktuelle HEAD erstellt und HEAD dann darauf zeigt. Der aktuelle HEAD hat jedoch kein übergeordnetes Element, da es sich um das anfängliche Commit im Repository handelt. Daher erhält der neue HEAD auch kein Commit, sodass sie voneinander getrennt werden.
Das alte HEAD-Commit wird von git-gc nicht gelöscht, da Refs / Heads / Master immer noch darauf verweisen .
Das Flag --allow-empty wird nur benötigt, weil wir einen leeren Baum festschreiben . Wenn es nach dem Git rm einige Git- Adds gäbe, wäre dies nicht notwendig.
In Wahrheit können Sie jederzeit einen getrennten Zweig erstellen, indem Sie das anfängliche Commit im Repository verzweigen, seinen Baum löschen, Ihren getrennten Baum hinzufügen und dann git commit --amend ausführen .
Ich weiß, dass dies nicht die Frage beantwortet, wie der Standardzweig im Remote-Repository geändert werden kann, aber es gibt eine saubere Antwort darauf, wie ein getrennter Zweig erstellt wird.
quelle
git fetch git:[email protected]:foo remote-branch-name && git checkout -b detached-branch FETCH_HEAD
einen neuen Zweig hinzudetached-branch
, der dem Zweigremote-branch-name
in Remote entsprichtgit:[email protected]:foo
. Natürlich kann die "Remote" ein Repository in einem lokalen Dateisystem sein, das Sie zuvor vorbereitet haben.Erstellen Sie zunächst den neuen Zweig, den Sie als Standard festlegen möchten, zum Beispiel:
$>git branch main
Als nächstes schieben Sie diesen Zweig zum Ursprung :
$>git push origin main
Wenn Sie sich jetzt bei Ihrem GitHub-Konto anmelden, können Sie in Ihr Repository gehen und Einstellungen> Standardzweig wählen und " Haupt " wählen .
Wenn Sie dies wünschen, können Sie den Hauptzweig löschen:
$>git push origin :master
quelle
git symbolic-ref
auf der Remote-Shell ausgeführt zu werden oder auf andere Weise dieHEAD
im Remote-Repository-Stammverzeichnis aufgerufene Textdatei zu ändern .Im Zusammenhang mit der Frage bin ich hier gelandet, als ich gesucht habe nach:
Wie mache ich ein lokales Repo auf einen geänderten Standardzweig auf GitHub aufmerksam?
Der Vollständigkeit halber fügen Sie die Antwort hinzu:
quelle
Für Gitolite-Leute unterstützt Gitolite einen Befehl namens - warte darauf -
symbolic-ref
. Sie können diesen Befehl remote ausführen, wenn Sie über die W-Berechtigung (Schreibberechtigung) für das Repo verfügen.quelle
Einfach melden Sie sich einfach in Ihrem Konto GitHub und auf der rechten Seite im Navigationsmenü wählen Einstellungen , in der Registerkarte Einstellungen wählen Standardzweig und zurück zur Hauptseite des Repository zurück, die den Trick für mich getan hat.
quelle