Frage

Wie kann ich einen Verweis des Git Fern HEAD auf etwas hinweisen, neben „Master“?

Mein Projekt hat eine Politik nicht einen „Master“ Zweig zu verwenden (alle Zweige sind aussagekräftige Namen haben). Darüber hinaus ist das kanonische Master-Repository nur über ssh:. //, ohne Shell-Zugang (wie GitHub oder Unfuddle)

Mein Problem ist, dass die Remote-Repository noch einen HEAD Bezug auf refs / heads / master hat, aber ich muß es auf einen anderen Zweig zeigen. Dies verursacht zwei Probleme:

  1. Beim Klonen des Repo, gibt dies,

      

    Warnung: Fern HEAD bezieht sich auf nicht vorhandene ref, nicht in der Lage zur Kasse

    .

    Das ist verwirrend und umständlich.

  2. Der web-basierte Code-Browser hängt von HEAD als Basis des Baumes für das Surfen. Ich brauche HEAD auf einen gültigen Zweig-zu-Punkt, dann.

War es hilfreich?

Lösung

Es gab fast die gleiche Frage auf GitHub pro Jahr vor.

Die Idee war, den Master-Zweig umbenennen:

git branch -m master development
git branch -m published master
git push -f origin master 
  

Master zu machen, was Sie Menschen nutzen wollen, und tun alle anderen Arbeiten in den Zweigen.

(a "git-symbolic-ref HEAD refs/head/published" nicht an die Remote-Repo vermehrt werden)

Dies ist vergleichbar mit " Wie kann ich origin / master in Git löschen".


Wie gesagt in dieses Thema : (Hervorhebung von mir)

  

git clone“ erzeugt nur eine einzige lokale Niederlassung.
  Um das zu tun, sieht es an der HEAD ref der Remote-Repo, und erstellt einen lokalen Zweig mit dem gleichen Namen wie der Remote-Zweig von ihr verwiesen wird.

     

Damit einpacken, Sie haben Repo-A und klonen:

     
      
  • HEAD Referenzen refs/heads/master und existiert
      -> Sie erhalten eine lokale Niederlassung namens Master, ausgehend von origin / master

  •   
  • HEAD Referenzen refs/heads/anotherBranch und existiert
      -> Sie erhalten eine lokale Niederlassung namens anotherBranch, ausgehend von origin/anotherBranch

  •   
  • HEAD Referenzen refs/heads/master und dass nicht existiert
      -> "git clone", klagt

  •   
     

Nicht sicher, ob es eine Möglichkeit gibt, um direkt den HEAD ref in einem Repo zu ändern .

(das ist der ganze Punkt Ihrer Frage ist, ich weiß;))


Vielleicht der einzige Weg, ein "Veröffentlichung für die Armen" , wo Sie:

 $ git-symbolic-ref HEAD refs/head/published
 $ git-update-server-info
 $ rsync -az .git/* server:/local_path_to/git/myRepo.git/

Aber das wäre Schreibzugriff auf den Server beinhaltet, was nicht immer möglich ist.


Wie ich in erklären " Git: Richtiger Weg Aktiv-Niederlassung in einem nackten Repository ändern ", git remote set-head nichts auf dem Remote-Repo ändern würde.

Es würde nur den Remote-Tracking-Zweig ändert lokal in Ihrem lokalen Repo, in remotes/<name>/HEAD gespeichert.

Andere Tipps

Update: Dies funktioniert nur für die lokale Kopie des Repository (der "Client"). Bitte beachten Sie die Kommentare anderer unten.

Mit einer aktuellen Version von git (Feb 2014), das richtige Verfahren wäre:

git remote set-head $REMOTE_NAME $BRANCH

So zum Beispiel, Schalten Sie den Kopf auf entfernten origin zu Zweig develop wäre:

git remote set-head origin develop

Da Sie GitHub erwähnen, es auf ihrer Website zu tun, gehen Sie einfach in Ihr Projekt, dann ...

admin > Default Branch > (choose something)

Fertig.

Siehe auch: http: // www .kernel.org / pub / Software / scm / git / docs / git-symbolisch-ref.html

Damit wird der Standardzweig im Git Repository. Sie können dies in blanken oder gespiegelten Repositories.

Verbrauch:

$ git symbolic-ref HEAD refs/heads/<branch name>

(war es schon im Grunde die gleiche Frage „ ein git erstellen symbolisches ref in Remote-Repository “, die keine universelle Antwort erhielt.)

Aber es gibt konkrete Antworten für verschiedene git "Farmen" (in denen mehrere Benutzer git repos durch eine begrenzte Schnittstelle verwalten können: via HTTP und SSH): http://Github.com , http://Gitorious.org , http://repo.or.cz , Girar ( http://git.altlinux.org ).

Diese spezifischen Antworten könnten für die diese Seite lesen und darüber nachzudenken, diese spezifischen Dienste nützlich sein.

Wenn Sie Zugriff auf die Remote-Repo aus einer Shell haben, gehen Sie einfach in die .git (oder das Hauptverzeichnis, wenn sein ein nackter Repo) und die HEAD-Datei auf den richtigen Kopf-zu-Punkt ändern. Zum Beispiel enthält standardmäßig immer ‚Refs: refs / heads / master‘, aber wenn Sie foo müssen die HEAD stattdessen sein, sondern nur die HEAD-Datei bearbeiten und den Inhalt ändern ‚Refs: refs / heads / foo‘ <. / p>

Sie können einen freistehenden Master Zweig erstellen nur mit Porzellan Git-Befehle:

git init
touch GO_AWAY
git add GO_AWAY
git commit -m "GO AWAY - this branch is detached from reality"

Das gibt uns einen Master Zweig mit einem unfreundlichen Nachricht (Sie höflicher sein wollen). Nun erstellen wir unsere "echten" Zweig (nennen wir es Stamm zu Ehren des SVN) und Scheidung aus Master :

git checkout -b trunk
git rm GO_AWAY
git commit --amend --allow-empty -m "initial commit on detached trunk"

Hey, presto! gitk --alle zeigt Master und Stamm ohne Verbindung zwischen ihnen.

Die "Magie" ist hier, dass - ändern Ursachen git commit ein neues Commit mit der gleichen Mutter wie die aktuellen HEAD zu erstellen, dann HEAD Punkt machen, . Aber die aktuelle HEAD hat keine Eltern da es die anfänglichen im Repository begehen, so dass die neuen HEAD man entweder nicht bekommen, so dass sie voneinander getrennt zu machen.

Der alte HEAD commit nicht durch gelöscht werden git-gc , weil refs / heads / Master immer noch auf sie.

Die - erlauben leer Flagge wird nur benötigt, weil wir einen leeren Baum sind zu begehen. Wenn es einige waren git add 's nach dem git rm , dann wäre es nicht notwendig sein.

In der Tat können Sie eine frei stehende Filiale jederzeit erstellen, indem Verzweigung die Anfänge im Repository begehen, dessen Baum löschen, Ihren freistehenden Baum hinzufügen, dann tun git commit --amend .

Ich weiß, dass dies nicht die Frage, beantwortet, wie der Standard Zweig auf der Remote-Repository zu ändern, aber es gibt eine klare Antwort, wie einen freistehenden Zweig erstellen.

Erstellen Sie zunächst die Niederlassung Sie als Standard festlegen möchten, zum Beispiel:

$>git branch main

Als nächstes drücken diesen Zweig zur Herkunft :

$>git push origin main

Wenn Sie jetzt auf Ihr GitHub Konto anmelden, können Sie zu Ihrem Repository gehen, und wählen Sie Einstellungen> Standard Zweig und wählen Sie „ Haupt .“

Dann, wenn Sie so wählen, können Sie den Master-Zweig löschen:

$>git push origin :master

Für gitolite Menschen unterstützt gitolite einen Befehl genannt - denn es warten - symbolic-ref. Es ermöglicht Ihnen, den Befehl remote ausführen, wenn Sie W (Schreiben) die Erlaubnis zum Repo haben.

auf die Frage Verwandte, ich hier gelandet, wenn für die Suche:

Wie kann ich eine lokale Repo bewusst eine geänderte Default-Zweig auf GitHub

Für die Vollständigkeit und fügte hinzu, die Antwort:

git remote set-head origin -a

Einfach melden Sie sich einfach in Ihrem Konto GitHub und auf der rechten Seite im Navigationsmenü wählen Sie Einstellungen in der Einstellungen Tab wählen Standard-Zweig und zurück zur Hauptseite Ihres Repository, das den Trick für mich getan hat.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top