it-swarm.com.de

Richten Sie git ein, um alle Zweige zu ziehen und zu schieben

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?

Ansonsten, wenn ich lokal einen neuen Zweig hinzufüge und ihn vom Server ziehen möchte, was ist der einfachste Weg, dies zu tun?

Ich habe einen neuen Zweig mit demselben Namen erstellt und versucht, ihn zu ziehen, aber er funktioniert nicht. Fragt mich nach der gesamten Remote-Konfiguration des Zweiges. Wie stelle ich das ein?.

552
Lakshman Prasad

Der einfachste Weg ist:

git Push --all Origin

Dadurch werden Tags und Zweige verschoben.

1178
brimble2010

Mit modern git holen Sie immer alle Zweige (als fernverfolgbare Zweige in den refs/remotes/Origin/* - Namespace, sichtbar mit git branch -r Oder git remote show Origin).

Standardmäßig (siehe Dokumentation der Konfigurationsvariablen Push.default) Drücken Sie passende Zweige, was bedeutet, dass zuerst musst du git Push Origin branch machen, damit git es immer auf git Push legt.

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:

$ git config --add remote.Origin.Push '+refs/heads/*:refs/heads/*'
$ git config --add remote.Origin.Push '+refs/tags/*:refs/tags/*'

oder bearbeiten Sie die Datei .git/config direkt, um etwa Folgendes zu erhalten:

 [remote "Origin"] 
 url = [email protected]: /srv/git/repo.git 
 fetch = + refs/heads/*: refs/remotes/Origin /*
 Fetch = + refs/tags/*: refs/tags /*
 Push = + refs/heads/*: refs/heads /*
 Push = + refs /tags/*:refs/tags/*
143
Jakub Narębski

Das Einfügen des + in die Push-Spezifikation ist wahrscheinlich eine schlechte Idee, da dies bedeutet, dass git gerne einen nicht schnellen Vorlauf durchführt auch ohne -f und wenn der Remote-Server eingerichtet ist Um diese zu akzeptieren, kann man die Geschichte verlieren.

Probieren Sie einfach Folgendes aus:

$ git config --add remote.Origin.Push 'refs/heads/*:refs/heads/*'
$ git config --add remote.Origin.Push 'refs/tags/*:refs/tags/*'
$ git config --add remote.Origin.fetch 'refs/heads/*:refs/remotes/Origin/*'
$ git config --add remote.Origin.fetch 'refs/tags/*:refs/tags/*'
32
Mark Reed

Ich hatte die folgenden Befehle verwendet, um alle Zweige in das neue Repository zu migrieren.

~$ git clone --mirror <url_of_old_repo>
~$ cd <name_of_old_repo>
~$ git remote add new-Origin <url_of_new_repo>
~$ git Push new-Origin master
~$ git Push new-Origin --mirror

[~ # ~] Anmerkung [~ # ~] : Ich musste beim Klonen eines Repos von Atlassian den vorletzten (dh Master zuerst drücken) Befehl verwenden - Stash an AWS CodeCommit (leeres Repo). Ich bin mir nicht sicher, warum, aber nachdem ich (git Push new-Origin --mirror) Standardzweig bezog sich auf einen anderen Zweig als master.

19
vikas027

Wenn Sie Zweige von einem alten zu einem neuen Repo verschieben und NICHT alle alten Repo-Zweige lokal haben, müssen Sie sie zuerst verfolgen.

for remote in `git branch -r | grep -v '\->'`; do git branch --track $remote; done

Dann fügen Sie Ihr neues Remote-Repo hinzu:

git remote add bb <path-to-new-repo>

Dann können Sie alle mit diesem Befehl pushen:

git Push -u bb --all

Oder Sie können das Repo mit den in den anderen Antworten angegebenen git config-Befehlen konfigurieren, wenn Sie dies nicht einmal tun oder nur lokale Zweige verschieben möchten.

Der wichtige Punkt, die anderen Antworten nur Push alle LOKALEN Zweige. Wenn die Zweige nur in einem alternativen REMOTE-Repository vorhanden sind, werden sie nicht verschoben, ohne sie zuerst zu verfolgen. Die hier vorgestellte for-Schleife hilft dabei.

11
Lance Cleveland

Um alle Verzweigungen ohne Verwendung von git branch -a Anzuzeigen, müssen Sie Folgendes ausführen:

for remote in `git branch -r`; do git branch --track $remote; done
git fetch --all
git pull --all

Jetzt können Sie alle Zweige sehen:

git branch

Um alle Zweige zu pushen, versuchen Sie:

git Push --all
5
tokhi

Wenn Sie alle Zweige von einem alten zu einem neuen Repo verschieben, müssen Sie in Ihrem lokalen Repo die Nachverfolgung jedes Zweigs zu vorhandenen Origin-Zweigen einrichten, bevor Sie zu dem neuen Repo wechseln, andernfalls all your Origin-Zweige werden im neuen Origin nicht angezeigt. Führen Sie dies manuell durch, indem Sie jeden Zweig nachverfolgen oder auschecken, oder verwenden Sie den einen Liner:

for remote in `git branch -r | grep -v '\->' | grep -v master`; do git branch --track `echo $remote|sed 's=Origin/=='` `echo $remote`; done

Dieser einzeilige Befehl basiert auf Versionen davon in anderen Antworten auf dieser Seite, ist aber wahrscheinlich besser, weil:

  1. im Gegensatz zu einigen älteren Varianten dieses Befehls auf dieser Seite, die nur einen Parameter für "--track" bereitstellen und somit für jeden Zweig ein Tracking-Master erstellt wird, ist dies nicht der Fall
  2. benennt die lokalen Filialen ohne das Präfix "Origin /", das ich persönlich nicht möchte - und stimmt mit dem überein, was passiert, wenn Sie eine Filiale normal auschecken.
  3. überspringt den Tracking-Master, da dies bereits geschieht
  4. das Auschecken funktioniert nicht wirklich, daher ist es schnell
  5. vermeidet das Stolpern über das -> in der Ausgabe von Git Branch -r

Wenn Sie als Nächstes den Ursprung wechseln, ersetzen Sie den Link zum alten Ursprung und zeigen Sie auf eine neue Fernbedienung. Stellen Sie sicher, dass Sie zuerst die neue Fernbedienung mit der Bitbucket/Github-Benutzeroberfläche erstellen, ihr jedoch keine Dateien hinzufügen, da sonst ein Zusammenführungsproblem auftritt. Z.B.

git remote set-url Origin [email protected]:YOUR/SOMEREPO.git

Jetzt drück. Beachten Sie, dass der zweite Befehl erforderlich ist, um auch die Tags zu pushen:

git Push -u --all Origin
git Push --tags Origin
3
abulka

Lösung ohne Hardcoding Origin in config

Verwenden Sie Folgendes in Ihrer globalen gitconfig

[remote]
    Push = +refs/heads/*
    Push = +refs/tags/*

Dies schiebt alle Zweige und alle Tags

Warum solltest du NICHT Origin in der Konfiguration fest codieren?

Wenn Sie fest codieren:

  1. Sie werden mit Origin als Remote in allen Repos enden. Sie können Origin also nicht hinzufügen, müssen jedoch set-url Verwenden.
  2. Wenn ein Tool eine Fernbedienung mit einem anderen Namen erstellt, wird Push all config nicht angewendet. Dann musst du die Fernbedienung umbenennen, aber das Umbenennen funktioniert nicht, da Origin bereits existiert (ab Punkt 1).

Das Holen wird bereits von modernem Git erledigt

Die Antwort von Jakub Narębski lautet:

Mit modernem Git holen Sie immer alle Zweige (als Fernverfolgungszweige in refs/remotes/Origin/* Namespace)

0
Dheeraj Bhaskar
for b in $(git branch -a | grep -v master | \
sed -e "s|remotes\/Origin\/\(.*\)|\1|g"); do git checkout $b && \
git Push Origin $b; done
0
030