2016-08-02 4 views
1

In unserem Team hatten wir bis jetzt zwei Repositories. Eine war Entwicklung und andere war Produktion.Konfigurieren von bedingten Push in gitconfig

Also haben wir die globale gitconfig-Datei als Standard-Fetch von Produktion und Standard-Push auf Entwicklung konfiguriert.

Jetzt haben wir ein drittes Repository namens Common eingeführt. Wer von "Common" klont, sollte als "Common" konfiguriert sein. Da wir "Entwicklung" als Standard-Push-Repository in global konfiguriert haben, zeigt der Standard-Push auch beim "Klonen" auf "Entwicklung" selbst im "Gemeinsamen" Repository.

Wie kann ich etwas wie unten in gitconfig global machen?

if (cloned repository from Production) 
then 
    default push is Development 

if (cloned repository from Common) 
then 
    default push is Common 
+1

Ein Weg wäre, die 'remote.pushDefault = Common' -Variable in der * local * -Konfiguration für das' Common'-Repo zu setzen, da dies [override] (https://git-scm.com/book/) de/v2/Customizing-Git-Git-Konfiguration # _git_config) der in der globalen Konfiguration eingestellte Wert. –

+0

@ EnricoCampidoglio: Jetzt habe ich zwei Standard-Push-Pfade nach der Änderung, die Sie empfohlen haben. –

+0

@SSHedge Könnten Sie bitte näher ausführen? Welchen Befehl hast du ausgeführt? Wie sieht dein '[remote]' config-Abschnitt aus? –

Antwort

1

Ihre globale Konfigurationsdatei Unter der Annahme, enthält etwas wie folgt aus:

[remote "origin"] 
pushurl = http://url/to/development 

hier ist ein Weg, was Sie erreichen wollen:

  1. Definieren Sie eine neue Fernbedienung im Common Repository, das Punkte zu der gleichen URL wie origin:

    git remote add common http://url/to/common 
    
  2. Set der remote.pushDefault Variable in der lokalen Konfigurationsdatei common:

    git config remote.pushDefault common 
    

Die remote.pushDefault Einstellung Git die URL drücken erzählt in dem angegebenen Remote statt origin definiert ist.

Hier ist von der documentation:

remote.pushDefault
Die Fernbedienung drücken standardmäßig. Überschreibt branch.<name>.remote für alle Zweige und wird von branch.<name>.pushRemote für bestimmte Zweige überschrieben.

In diesem Fall wird die Push-URL für origin in der globalen Konfigurationsdatei definiert, aber das Common Repository wird die Push-URL in seiner eigenen Fernbedienung definiert verwenden, mit dem Namen common.

+0

Wenn ich diese Änderung mache, bleibt diese Einstellung bestehen, bis ich den geklonten Repo aus Common entfernt habe. Wenn ich einen neuen Repo von Common clone, dann muss ich diesen Schritt wiederholen. Ist es nicht? –

+0

Richtig - die lokale Konfigurationsdatei eines Repos [wird nicht remote freigegeben] (http://stackoverflow.com/a/6548056/26396). Aber ich denke, Sie haben bereits eine Möglichkeit, die globale Einstellung "remote.origin.pushurl" zu teilen. Diese lokalen Einstellungen könnten auf ähnliche Weise geteilt werden. –

+0

Danke Enrico. Das macht den Job. –