Git push to refs/remotes/mine/master

Lesezeit: 4 Minuten

Git push to refsremotesminemaster
zedoo

Ich verfolge ein Remote-Repository, dh ich habe refs/remotes/joe/master.

Ich weiß, dass ich Joes Änderungen so schnell wie möglich in mein Repository übernehmen möchte.
Ich möchte nicht verwenden fetch, weil ich vielleicht nicht am Computer bin, wenn er sich begeht. Also sage ich ihm: Vielleicht bin ich zum Einkaufen unterwegs, also drücke deine Änderungen bitte einfach auf refs/remotes/joe/master.
Der Grund, warum ich seine Änderungen so schnell wie möglich in meinem Repo haben möchte, ist, dass er abends seinen Computer ausschaltet, damit ich seine Änderungen nicht holen kann, wenn ich vom Einkaufen zurückkomme.

Ich weiß, dass Joe nur ein bloßes, öffentliches Repository einrichten sollte, aber das ist eine Art Overhead.

Drängt zu refs/remotes/joes/master in so einem fall okay?

  • thread.gmane.org/gmane.comp.version-control.git/42506/… war das, wonach ich wirklich gesucht habe.

    – zedoo

    24. Okt ’10 um 13:44

  • Ich habe Ihren Kommentar komplett übersehen, daher habe ich eine Antwort gepostet, die diesen Thread detailliert beschreibt (sowie einen Verweis auf eine andere Lösung).

    – VonC

    24. Mai ’12 um 5:52

Git push to refsremotesminemaster
VonC

“best/einfachste Möglichkeit, mehrere (nicht nackte) Git-Repos synchron zu halten” schlägt vor, mit dieser Art von Beitrag mit einem Post-Update-Hook umzugehen.

Es gibt jedoch eine einfachere Lösung:

Wie The OP zedoo kommentiert, die Thread auf git push zu einem nicht nackten Repo (geschrieben von Git-Maintainer Junio ​​C Hamano, im Jahr 2007) Details:
(und es ist ein großartiges Beispiel für ein Fall, in dem es angemessen ist, auf ein Non-Bare-Repo zu pushen)

Receive-Pack aktualisiert die . nicht HEAD reflog, da es den tatsächlichen Zweig aktualisiert, nicht HEAD.
Wenn du stattdessen gedrängt hast HEAD du solltest das sehen HEAD reflog-Eintrag auch.

Was ist mit der Aufteilung? HEAD wenn Sie zum darunter liegenden Zweig pushen und machen HEAD ein Nicht-Symref?

Ich denke, dass keine der Komplikationen erforderlich sind, und ich denke, jemand hat Folgendes erwähnt: gutes Beispiel, das ist ein Firewall-Host, in den nur gepusht werden kann.
Obwohl er in diesem Beispiel weiß, dass er in der idealen Welt in umgekehrter Richtung abrufen kann, lässt ihn die Netzwerkkonfiguration dies nicht zu. daher brauche ich einen schub.

Um vernünftig damit umzugehen, können Leute, die zwischen nicht nackten Repositorys pushen, einfach vergessen, in Branch-Heads zu pushen.

Stattdessen können sie ihre Pushs so arrangieren, dass sie a wahres Spiegelbild ihres Abrufs die sie gerne tun könnten.
Um zu veranschaulichen:

Auf Repository A das kann man nur hineinschieben, wenn man könnten aus Repository holen B, du würdest:

$ git fetch B

mit sowas:

[remote "B"] fetch = refs/heads/*:refs/remotes/B/*

Aber leider weil man nur reinschieben kann A von B, du würdest das weiterlaufen lassen B stattdessen:

$ git push A

mit:

[remote "A"] push = refs/heads/*:refs/remotes/B/*

Und nachdem Sie Ihren Push ausgeführt haben, du kommst mit repo zum automaten A darauf und erinnere dich daran, dass das, was du getan hast, ein Spiegelbild von “git fetch B, du würdest:

$ git merge remotes/B/master

und du bist fertig.

Mit anderen Worten, denk nicht an refs/remotes/B als etwas, das für den Gebrauch von “git fetch“.
Sein Zweck besteht darin, das Remote-Repository zu verfolgen B‘s Köpfe
.
Sie pflegen diese Hierarchie, indem Sie fetch im Repository ausgeben A.
Sie können Push-in-Repository ausgeben B dies auch zu tun.

Ich pushe fast jeden Tag in ein Live-Repository.
Mein typischer Tag endet so:

gitster$ git push kernel-org-private
gitster$ ssh kernel.org
kernel.org$ git merge origin
kernel.org$ Meta/Doit -pedantic &
kernel.org$ exit
... go drink my tea ...

wo

  1. gitster ist meine private Entwicklungsmaschine
  2. kernel.org ist eine Maschine, die mir von freundlichen k.org-Leuten zur Verfügung gestellt wurde
  3. Meta ist eine Kasse von meinem ‘todo‘Zweig und
  4. Doit ist ein Skript zum Erstellen aller vier öffentlichen Zweige.

Ich gehe immer ‘master‘ auf meinem ausgecheckt kernel.org Repository, und der Push von meinem privaten Computer ist erledigt (ich verwende immer noch das nicht separate Remote-Layout):

Push: refs/heads/master:refs/heads/origin
Push: refs/heads/next:refs/heads/next
Push: +refs/heads/pu:refs/heads/pu
Push: refs/heads/maint:refs/heads/maint

Also das erste, was ich tue, nachdem ich mich eingeloggt habe kernel.org Maschine soll laufen”git merge origin” um die ‘master‘ auf dem neusten Stand.
Wenn Sie an ‘push‘Spiegelbild von’fetch‘ Sie würden verstehen, warum.

Es ist wie die Ausgabe von “git fetch” auf kernel.org Maschine, um das druckfrische von meiner privaten Maschine zu holen und dann “git merge” normalerweise ist es “git pull” würde dies in einem einzigen Schritt tun).

Aber manchmal gehe ich aus Versehen ‘next‘ geprüft.
Wenn ich herausfinde, dass ich nicht gegangen bin ‘master‘ausgecheckt, würde ich tun”git reset --hard HEAD” bevor ich etwas anderes tue, und ich möchte nicht, dass mein Druck manchmal dazu führt, dass ich distanziert bin HEAD und manchmal nicht.
Ich möchte nicht die Information verlieren, in welcher Filiale ich zuletzt war (denn als nächstes würde ich herausfinden, in welcher Filiale Meta/Doit fehlgeschlagen).
Wenn ich war genervt genug, dass ich manchmal versehentlich in den Live-Zweig gedrängt habe, würde ich auf ein separates Remote-Layout umschalten und hineinschieben remotes/origin/* Hierarchie, und danach gibt es wirklich nichts zu befürchten.

.

298700cookie-checkGit push to refs/remotes/mine/master

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy