Ich möchte standardmäßig alle Zweige verschieben und ziehen, einschließlich der neu erstellten.
Gibt es eine Einstellung, die ich dafür definieren kann?
Was ist der einfachste Weg, wenn ich einen neuen Zweig lokal hinzufüge und ihn vom Server abrufen möchte?
Ich habe einen neuen Zweig mit demselben Namen erstellt und versucht zu ziehen, aber es funktioniert nicht. Fragt mich nach der gesamten Remote-Konfiguration des Zweigs. Wie stelle ich es ein?
git
version-control
branch
push
Lakshman Prasad
quelle
quelle
Antworten:
Der einfachste Weg ist:
Dadurch werden Tags und Zweige verschoben.
quelle
-u
einmal hinzufügen , z. B.git push --all origin -u
wird das Tracking eingerichtet und danach können Sie es einfach verwendengit push
.git push --tags origin
alle Tags pushen.Mit modernem Git rufen Sie immer alle Zweige ab (als Fernverfolgungszweige in den
refs/remotes/origin/*
Namespace, sichtbar mitgit branch -r
odergit remote show origin
).Standardmäßig (siehe Dokumentation der
push.default
Konfigurationsvariablen) pushen Sie übereinstimmende Zweige , was bedeutet, dass Sie zuerst tun müssen, damitgit push origin branch
git es immer weiter pushtgit push
.Wenn Sie immer alle Zweige pushen möchten, können Sie push refspec einrichten. Angenommen, die Fernbedienung heißt
origin
, können Sie entweder git config verwenden :oder bearbeiten Sie die
.git/config
Datei direkt, um Folgendes zu erhalten:quelle
git push --all origin
ist gut für die einmalige Veröffentlichung aller Zweige und Tags, obwohl standardmäßig bis zur aktuellen Version "Matching" -Semantik bedeuten würde, dass Sie alle Zweige danach verschieben würden ... es sei denn, Sie fügen einen neuen Zweig oder ein neues Tag hinzu. Die Einstellung zu „push [...] alle Zweige standardmäßig“ als geschrieben.fatal: Invalid refspec ''+refs/heads/*:refs/heads/*''
(Hinweis: Ich bin auf Git 2.0. Ich arbeite immer noch daran, wie ich das beheben kann.)push.default
istsimple
.Das Einfügen des + in die Push-Spezifikation ist wahrscheinlich eine schlechte Idee, da dies bedeutet, dass git auch ohne -f gerne einen Push ohne Vorlauf ausführt . Wenn der Remote-Server so eingerichtet ist, dass er diese akzeptiert, können Sie den Verlauf verlieren.
Versuchen Sie genau das:
quelle
--global
jedem dieser Elemente auch die Option hinzufügen , um dies zum globalen Standard für alle Ihre Repositorys zu machen.git remote add
.Ich hatte die folgenden Befehle verwendet, um alle Zweige in das neue Repository zu migrieren.
HINWEIS : Ich musste beim Klonen eines Repos von Atlassian Stash nach AWS CodeCommit (leeres Repo) den vorletzten Befehl (dh Push Master First ) verwenden. Ich bin mir nicht sicher, warum, aber nach dem Drücken von (
git push new-origin --mirror
) bezog sich der Standardzweig auf einen anderen Zweig alsmaster
.quelle
git push new_origin --all
einfach Ihre aktuellen lokalen Zweige nach new_origin, nicht alle Ursprungszweige.--bare
Repository macht , das sich ein bisschen von einem regulären Repository unterscheidet. Es enthält nur die.git
Dateien, nicht Ihre Dateien. Es ist vollkommen genug, wenn Sie nicht daran arbeiten wollen. Siehe--bare
und--mirror
git-scm.com/docs/git-clone .Wenn Sie Zweige von einem alten in ein neues Repo verschieben und NICHT alle alten Repo-Zweige lokal haben, müssen Sie sie zuerst verfolgen.
Fügen Sie dann Ihr neues Remote-Repo hinzu:
Dann können Sie alle mit diesem Befehl pushen:
Sie können das Repo auch mit den in den anderen Antworten angegebenen Git-Konfigurationsbefehlen konfigurieren, wenn Sie dies nicht einmal tun oder nur lokale Zweige verschieben möchten.
Der wichtige Punkt, die anderen Antworten schieben nur alle lokalen Zweige. Wenn die Zweige nur in einem alternativen REMOTE-Repository vorhanden sind, werden sie nicht verschoben, ohne sie zuvor zu verfolgen. Die hier vorgestellte for-Schleife hilft dabei.
quelle
git branch --track reponame origin/reponame
ansonsten, dass Sie alle Remote-Zweige auf dem aktuellen lokalen Zweig verfolgengit branch -r | grep -v '\->' | sed 's/ origin\///'
, das nur den Namen des Remote-Zweigs enthält.Um alle Zweige ohne Verwendung zu sehen
git branch -a
, sollten Sie Folgendes ausführen:Jetzt können Sie alle Zweige sehen:
Um alle Zweige zu schieben, versuchen Sie:
quelle
git fetch --all
du esWenn Sie alle Zweige von einem alten in ein neues Repo verschieben, müssen Sie in Ihrem lokalen Repo die Verfolgung jedes Zweigs zu vorhandenen Ursprungszweigen einrichten, bevor Sie zum neuen Repo wechseln. Andernfalls werden nicht alle Ihre Ursprungszweige angezeigt der neue Ursprung. Tun Sie dies manuell, indem Sie jeden Zweig verfolgen oder auschecken, oder verwenden Sie den einen Liner:
Dieser einzeilige Befehl basiert auf Versionen davon in anderen Antworten auf dieser Seite, ist aber wohl besser, weil:
Wenn Sie den Ursprung wechseln, ersetzen Sie als Nächstes die Verbindung zum alten Ursprung und zeigen Sie auf eine neue Fernbedienung. Stellen Sie sicher, dass Sie zuerst die neue Fernbedienung mithilfe der Bitbucket / Github-Benutzeroberfläche erstellen, aber keine Dateien hinzufügen, da sonst ein Zusammenführungsproblem auftritt. Z.B
Jetzt drücken. Beachten Sie, dass der zweite Befehl erforderlich ist, um auch die Tags zu übertragen:
quelle
Lösung ohne Hardcodierung
origin
in der KonfigurationVerwenden Sie Folgendes in Ihrer globalen gitconfig
Dies schiebt alle Zweige und alle Tags
Warum sollten Sie NICHT
origin
in der Konfiguration fest codieren?Wenn Sie fest codieren:
origin
in allen Repos als Fernbedienung enden . Sie können also keinen Ursprung hinzufügen, müssen ihn jedoch verwendenset-url
.origin
bereits existiert (ab Punkt 1). Denken Sie daran :)Für das Holen sorgt schon der moderne Git
Nach Jakub Narębskis Antwort:
quelle