2016-07-05 28 views
1

I 2 repos habe - repoMain und repoSub, wo ich auf der repoSub arbeitete ..aktualisiert einige Inhalte aus einem anderen Repo in lokale Repo

Ein paar Monate zurück, ist repoSub als Gabel erstellt von repoMain aus, dann Ein paar Monate später, als RepoMain mit einigen neuen Sachen aktualisiert wurde, wollte ich jetzt sicherstellen, dass RepoSub einige der Common/Core-Dateien auf der gleichen Ebene wie RepoMain hat.

Erlauben Sie mir, ein einfaches Beispiel zu nennen (hoffentlich kann es verstanden werden ..), Eg. 5 Elemente in jedem Repo, aber deren Dateiinhalt kann sich voneinander unterscheiden.

  • 2 gleiche Dateinamen mit dem gleichen Inhalt
  • 2 Core-Dateien mit dem gleichen Namen, aber mit unterschiedlichen Inhalten
  • die letzte Datei ist eine andere Datei, verschiedene Inhalte von beide repos

Wie Ich habe an RepoSub gearbeitet, ich wollte die 2 Dateien mit dem gleichen Dateinamen (aber ihre Dateiinhalte sind anders) von RepoMain aktualisieren, was ist der beste Weg, es zu tun, damit ich Konflikte minimieren/nicht haben kann Dateien im RepoSub werden von RepoMain etc. überschrieben?

Ich habe versucht, etwas von der folgenden Aktionen ausführen:

  • git remote mainRepo hinzufügen
  • git mainRepo
  • git Kasse --track mainRepo/Master
  • ∘ fatal holen: Ein Zweig namens ‚Master ' ist bereits vorhanden.
  • ∘ Schließlich versuche ich mit einer anderen Namensgebung auf einen anderen Zweig aus solchen als mainRepo/testBranch
  • git checkout master
  • git merge testBranch

Und ich habe eine Reihe von Konfliktfehler etc ..

+0

Konflikt Fehler ist unvermeidlich, wenn Dateien separat geändert wurden. Es gibt eine Reihe von Anleitungen zum Lösen von Zusammenführungskonflikten, die Sie suchen und lesen können. – gzh

Antwort

0

Verwenden Sie das Bestellformular git checkout [-p|--patch] [<tree-ish>] [--] <pathspec>…​, um Dateien anstelle von Zweigen auszuchecken.

git checkout --patch repoMain/master -- myFile.java 

gemäß den git-checkout Documentation:

Wenn <Pfade> oder --patch gegeben sind, GIT Kasse Zweige schaltet nicht. Es aktualisiert die benannten Pfade in der Arbeitsbaumstruktur von der Indexdatei oder von einem benannten < Baum-ish > (am häufigsten ein Commit). In diesem Fall sind die Optionen -b und --track bedeutungslos, und jede von ihnen führt zu einem Fehler. Das < Tree-ish-Argument > kann verwendet werden, um ein spezifisches tree-ish (d. H. Commit, tag oder tree) anzugeben, um den Index für die gegebenen Pfade zu aktualisieren, bevor der Arbeitsbaum aktualisiert wird.

git checkout mit <Pfaden> oder --patch wird aus dem Index geändert oder gelöscht Pfade zu ihren ursprünglichen Inhalte wiederherzustellen oder ersetzen Pfade mit den Inhalten von einer benannten < Baum-ish > (meist ein commit-ish).

-p

--patch

Interaktive große Stücke, in der Differenz zwischen der < Baum-isch > auswählen (oder dem Index, wenn nicht spezifiziert) und die Arbeitsbaum. Die ausgewählten Hunks werden dann umgekehrt auf den Arbeitsbaum angewendet (und wenn ein < Baum-isch > angegeben wurde, der Index).

Dies bedeutet, dass Sie git checkout -p verwenden können, um Änderungen in Ihrem aktuellen Arbeitsbaum selektiv zu verwerfen.