2010-01-23 6 views
6

Ich möchte Teilbaum-Zusammenführungen verwenden, um ein Remote-Projekt in ein Verzeichnis in meinem eigenen Git-Baum zu ziehen. Ich folgte den Anweisungen hier: using subtree mergeGit-Unterverzeichnis-Tags

Aber ich bin mir nicht sicher, wie man ein Tag auscheckt. Ich stelle mir vor, dass dies eine häufige Anfrage ist - Sie möchten ein externes Projekt einbinden, erhalten aber eine sicher markierte Version der Quelle. Die Teilbaum Merge-Lösung funktioniert gut, aber ich bin mir nicht sicher, wie das gewünschte Tag zu bekommen? Liebe Git, aber manchmal tut es mir weh ....

Antwort

3

Wenn Sie git tag eingeben, erhalten Sie eine Liste aller Tags in Ihrem Repository. Remote-Tags werden auch hier angezeigt, und ich weiß nicht, ob sie Konflikte verursachen könnten (dies wurde nicht überprüft) und wie Sie überprüfen können, welche Tags in Ihr Repository importiert wurden.

Aber was ich überprüft habe, ist, dass, wenn Sie remote hinzufügen und es von einem anderen Projekt abruft, Sie sehen, welche Tags importiert werden. Dann können Sie mit diesem Tag verbinden, zum Beispiel:

git merge -s ours --no-commit v0.1.2 # instead of: Bproject/master (2) 
git read-tree --prefix=dir-B/ -u v0.1.2 # instead of: Bproject/master (3) 

und es sollte funktionieren.

Hoffe, es hilft ein wenig, aber ich bin nicht so mit git fortgeschritten wie ich :-) möchte

+0

Wenn ich nicht Bproject/Master bieten, wie weiß git, welche Remote mit mir Verschmelzung? – cmaughan

+0

@cmaughan Git weiß es nicht. Alles, was es weiß, sind Sha's und jedes Sha (repräsentiert auch durch tag, oder Bproject/master) bezieht sich auf etwas Commit, welches Eltern hat, und so weiter. Das ist der Grund, warum Sie die Änderungen ('-f' in' git remote') vom Remote-Repository holen - Sie erhalten alle Commits und ihre Shas. Und dann fusionierst du einen Baum (entfernt, natürlich, sha) mit deinem Baum. Hoffe, das ist wie es funktioniert – MBO

+0

Okay - klingt gut für mich! Das Thema der Kollisions-Tags ist etwas, worüber ich mich gewundert habe - wenn ich ein Tag habe - v1.5 in meiner App und die Fernbedienung als v1.5-Tag, wie sortiert git das aus? So oder so, scheint die Lösung zu sein, nach der ich gesucht habe ... – cmaughan

0

Ich tat es für ein Beispielprojekt auf Github die hesco/hesco-weave wie folgt aufgerufen:

I curl verwendet, jq, geschnitten und Schwanz-Befehle in den folgenden Beispielen, so dass Sie sie haben müssen, bevor Sie die Beispiele ausgeführt wird.

Erste, die beiden letzten Tags des Projekts gefunden:

[email protected]: ~ $ curl -s https://api.github.com/repos/hesco/hesco-weave/git/refs/tags | jq -r ".[].ref" | cut -d "/" -f 3 
v0.1 
v0.2 
v0.3 
v0.4 
v0.5 
v0.6 
v0.7 
v0.8 
v0.8.6 
v0.8.7 

[email protected]: ~ $ curl -s https://api.github.com/repos/hesco/hesco-weave/git/refs/tags | jq -r ".[].ref" | cut -d "/" -f 3 | tail -n 3 
v0.8.6 
v0.8.7 

Oder wenn Sie eine checkouted Version des Projekts haben:

[email protected]: ~/github/hesco-weave (master) $ git remote -v 
origin https://github.com/hesco/hesco-weave.git (fetch) 
origin https://github.com/hesco/hesco-weave.git (push) 
[email protected]: ~/github/hesco-weave (master) $ git tag -l 
v0.1 
v0.2 
v0.3 
v0.4 
v0.5 
v0.6 
v0.7 
v0.8 
v0.8.6 
v0.8.7 

[email protected]: ~/github/hesco-weave (master) $ git tag -l | tail -n 2 
v0.8.6 
v0.8.7 

die sha von Refs sind wie folgt :

[email protected]: ~ $ git ls-remote | tail -n 2 
be74d8368acd4815b6863daded46a232944e0d84 refs/tags/v0.8.6 
9181306caa304b4cf8b3764b1446c0c4006833d8 refs/tags/v0.8.7 

Zweite wird ein Git Repository erstellt:

[email protected]: ~ $ mkdir -p ~/test 
[email protected]: ~ $ cd ~/test 
[email protected]: ~/test $ git init 
Initialized empty Git repository in ~/test/.git/ 
[email protected]: ~/test $ touch README.md 
[email protected]: ~/test $ git add . 
[email protected]: ~/test $ git commit -m "README.md added" 
[master (root-commit) b1ac90e] README.md added 
1 file changed, 0 insertions(+), 0 deletions(-) 
create mode 100644 README.md 
[email protected]: ~/test (master) $ git log 
commit 19c0570a414c4fd1635444b7a937dfc41c93a847 
Author: Me <[email protected]> 
Date: Wed Jun 14 13:02:05 2017 +0200 

README.md added 

Dritte wird das v0.8.6 Tag der Github Repository auf das erstellte Repository als Teilbaum hinzugefügt:

[email protected]: ~/test (master) $ git subtree add --squash --prefix=weave https://github.com/hesco/hesco-weave.git v0.8.6 

git fetch https://github.com/hesco/hesco-weave.git v0.8.6 
warning: no common commits 
remote: Counting objects: 543, done. 
remote: Compressing objects: 100% (193/193), done. 
remote: Total 543 (delta 306), reused 536 (delta 306), pack-reused 0 
Receiving objects: 100% (543/543), 93.19 KiB | 0 bytes/s, done. 
Resolving deltas: 100% (306/306), done. 
From https://github.com/hesco/hesco-weave 
* tag    v0.8.6  -> FETCH_HEAD 
Added dir 'weave' 

Trace Info:

[email protected]: ~/test (master) $ git log 
commit e5dc318c4437cd22ebddb9e82e8c419aef72a781 
Merge: b1ac90e 19c0570 
Author: me <[email protected]> 
Date: Wed Jun 14 13:02:25 2017 +0200 

    Merge commit '19c0570a414c4fd1635444b7a937dfc41c93a847' as 'weave' 

commit 19c0570a414c4fd1635444b7a937dfc41c93a847 
Author: me <[email protected]> 
Date: Wed Jun 14 13:02:25 2017 +0200 

    Squashed 'weave/' content from commit be74d83 

    git-subtree-dir: weave 
    git-subtree-split: be74d8368acd4815b6863daded46a232944e0d84 

commit b1ac90efbfe5978bac52984c29e6ec7904ed9a75 
Author: me <[email protected]> 
Date: Wed Jun 14 13:02:05 2017 +0200 

    README.md added 

Schließlich, die Webart Unterstruktur mit dem neueren Tag v0.8.7 ist mit git subtree pull verschmolzen:

[email protected]: ~/test (master) $ git subtree pull --squash --prefix=weave https://github.com/hesco/hesco-weave.git v0.8.7 

warning: no common commits 
remote: Counting objects: 548, done. 
remote: Compressing objects: 100% (195/195), done. 
remote: Total 548 (delta 311), reused 541 (delta 309), pack-reused 0 
Receiving objects: 100% (548/548), 90.50 KiB | 0 bytes/s, done. 
Resolving deltas: 100% (311/311), done. 
From https://github.com/hesco/hesco-weave 
* tag    v0.8.7  -> FETCH_HEAD 
Merge made by the 'recursive' strategy. 
weave/Changelog  | 1 + 
weave/Modulefile | 2 +- 
weave/README.md  | 2 +- 
weave/metadata.json | 2 +- 
4 files changed, 4 insertions(+), 3 deletions(-) 

Trace Info:

[email protected]: ~/test (master) $ git log 
commit 9116e133c8d84de1df9883a8b5558a2350ebc86e 
Merge: e5dc318 eb2e273 
Author: me <[email protected]> 
Date: Wed Jun 14 13:03:16 2017 +0200 

    Merge commit 'eb2e2733a75d59eb1adebf4755d5b11cb74e2b98' 

commit eb2e2733a75d59eb1adebf4755d5b11cb74e2b98 
Author: me <[email protected]> 
Date: Wed Jun 14 13:03:16 2017 +0200 

    Squashed 'weave/' changes from be74d83..9181306 

    9181306 make release used to update version to v0.8.7 
    3871cf5 Update changelog, tag v0.8.6, fix link in README 
    REVERT: be74d83 Update changelog, tag v0.8.6, fix link in README 

    git-subtree-dir: weave 
    git-subtree-split: 9181306caa304b4cf8b3764b1446c0c4006833d8 

commit e5dc318c4437cd22ebddb9e82e8c419aef72a781 
Merge: b1ac90e 19c0570 
Author: me <[email protected]> 
Date: Wed Jun 14 13:02:25 2017 +0200 

    Merge commit '19c0570a414c4fd1635444b7a937dfc41c93a847' as 'weave' 

commit 19c0570a414c4fd1635444b7a937dfc41c93a847 
Author: me <[email protected]> 
Date: Wed Jun 14 13:02:25 2017 +0200 

    Squashed 'weave/' content from commit be74d83 

    git-subtree-dir: weave 
    git-subtree-split: be74d8368acd4815b6863daded46a232944e0d84 

commit b1ac90efbfe5978bac52984c29e6ec7904ed9a75 
Author: me <[email protected]> 
Date: Wed Jun 14 13:02:05 2017 +0200 

    README.md added 


[email protected]: ~/test (master) $ ll 
total 4 
-rw-rw-r-- 1 me me 0 Jun 14 13:01 README.md 
drwxrwxr-x 8 me me 4096 Jun 14 13:03 weave