2012-06-12 8 views
7

Ich arbeite an einem Projekt und ich habe eine zentrale Git Repo. Dieses Projekt dient als Grundlage für eine Reihe von Gabeln.Git Tracking Upstream

Ist es möglich, meine lokalen Arbeits Repository für eine Gabel zu konfigurieren, die von zentraler Bedeutung für das Projekt als Ursprung zu verfolgen und das Skelett des Masters als separater Zweig verfolgen den Meister des Skeletts Kirsche an das Gerüst holen Änderungen genannt Upstream-Tracking?

Ich glaube, ich möchte, dass meine Workflow so etwas wie sein:

Skelett erstellen >> Gabel Skelett >> Skeleton Pulls Änderungen von Fork 2 >> Fork 1 Pulls Änderungen von Skeleton

Gibt es einen besseren Prozess zu tun, was ich beschrieben habe?

Antwort

7

Lesen Sie die "Step 3: Configure remotes" der GitHub "Fork ein Repo" Seite (Ich weiß, dass Sie nicht GitHub nicht erwähnt, aber es ist immer noch relevant)

  • origin ist die Remote-Adresse Ihrer Gabel, dass Ihr lokaler Klon kann
  • upstream von/Push-Pull ist die Remote-Adresse des ursprünglichen Repo Skeleton

So Upstream ist kein Zweig (Sie es mit einem git remote add upstream https://..../Skeleton.git hinzufügen).

Aber Sie können eine lokale Niederlassung definieren, die für die Upstream-Zweig der Fernortungs Zweig Master aus Upstream-Repo, mit git branch haben:

git branch --set-upstream upstream_master upstream/master 

Sie jedoch nicht über eine lokale Niederlassung benötigen, vor allem, wenn Sie wird nie neue Commits darauf machen: Sie können Ihren Master direkt mit upstream/master vergleichen, nach einer git fetch upstream, Cherry-Picking, was Sie brauchen von upstream/master.

+0

Das, was ich versucht habe, hat diese Frage ausgelöst. Der Befehl 'git branch --set-upstream upstream_master upstream/master' funktioniert nicht direkt nach einem' git remote add upstream/srv/repos/git/skeleton.git'. Warum das? Ich habe das Problem bei der Fehlerbehebung behoben. Ich wollte nicht 'git fetch upstream' in meinem Master-Arbeitsbaum ausführen, aber wenn ich das zur Fehlersuche nutze, kann ich einen entfernten Tracking-Zweig zu upstream/master hinzufügen.Ich nehme an, es liegt daran, dass der Remote-Zweig Upstream/Master bis dahin nicht in meinem Repo ist. –

+0

direkt nach 'remote add'? Sie benötigen zunächst einen 'git fetch upstream', damit der Remote-Tracking-Zweig' upstream/master' geholt und in Ihr lokales Repo geladen wird. Ein 'git fetch' ändert keine Ihrer lokalen Dateien. – VonC

1

Nach Ihrer Beschreibung, sollten Sie die Gabeln auf das Skelett rebase sobald sie sich ändert, mit

$ git rebase upstream 

Dies wird die Situation verwandeln, wie

folgt
initially: 
1 - 2 - 3 <- upstream 
     \- 4 <- fork 

upstream changes: 
1 - 2 - 3 - 5 - 6 <- upstream 
     \- 4 <- fork 

after rebase: 
1 - 2 - 3 - 5 - 6 <- upstream 
       \- 4 <- fork 

Mit anderen Worten: Ihre Gabel wird es sieht so aus, als ob es von der neuesten Version des Skeletts gespalten wäre.

Der Nachteil dieses Ansatzes ist, dass es die Geschichte der Gabeln ändert ... Wenn Sie dies nicht wollen, können Sie einfach stromaufwärts in Gabelung zusammenführen (keine Notwendigkeit, Kirsche Pick ich denke).

+0

Wenn Dateien nach der Gabel in stromaufwärts entfernt wurden und vor dem Unterfütterungsmaterial, wird geschehen, was geschieht, wenn git Änderungen an diesen Dateien gilt? –

+0

Wenn Sie die Dateien nicht geändert haben, werden sie während des Rebases entfernt. Wenn Sie sie geändert haben, haben Sie einen Konflikt, den Sie manuell lösen müssen. – Sjlver

Verwandte Themen