2010-01-23 29 views
6

Tôi muốn sử dụng sự phối hợp subtree để kéo một dự án từ xa vào một thư mục trong cây git của riêng tôi. Tôi đã làm theo hướng dẫn tại đây: using subtree mergeThẻ subtit Git

Nhưng tôi không chắc chắn cách thanh toán thẻ. Tôi tưởng tượng đây là một yêu cầu chung - bạn muốn kéo vào một dự án bên ngoài nhưng nhận được một phiên bản được gắn thẻ an toàn của nguồn. Giải pháp hợp nhất subtree hoạt động rất tốt, nhưng tôi không biết cách lấy thẻ tôi muốn? Yêu git, nhưng đôi khi nó làm tôi đau đầu ....

Trả lời

3

Khi bạn nhập git tag bạn sẽ nhận được danh sách tất cả các thẻ trong kho lưu trữ của mình. Thẻ từ xa cũng hiển thị ở đây và tôi không biết liệu chúng có xung đột hay không (không kiểm tra) và cách kiểm tra xem thẻ nào đã được nhập vào kho lưu trữ của bạn.

Nhưng những gì tôi đã kiểm tra là khi bạn thêm từ xa và nó lấy từ dự án khác, bạn sẽ thấy những thẻ nào được nhập. Sau đó, bạn có thể hợp nhất với thẻ đó, ví dụ:

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) 

và nó sẽ hoạt động.

Hy vọng nó sẽ giúp một chút, nhưng tôi không phải là tiên tiến với git như tôi muốn :-)

+0

Nếu tôi không cung cấp Bproject/thạc sĩ, làm thế nào để git biết mà từ xa tôi sáp nhập với ai? – cmaughan

+0

@cmaughan Git không biết. Tất cả những gì nó biết là sha và mỗi sha (được biểu diễn bằng thẻ, hoặc Bproject/master) tham khảo một số cam kết, trong đó có cha mẹ, và như vậy. Đó là lý do tại sao bạn lấy ('-f' tùy chọn trong' git remote') thay đổi từ kho lưu trữ từ xa - bạn nhận được tất cả các cam kết và sha của nó. Và sau đó bạn kết hợp một số cây (từ xa, bởi sha của khóa học) để cây của bạn. Hy vọng thats nó hoạt động như thế nào – MBO

+0

Được rồi - âm thanh tốt với tôi! Các thẻ va chạm điều là một cái gì đó tôi đã tự hỏi về - nếu tôi có một thẻ - v1.5 trên ứng dụng của tôi, và từ xa như một thẻ v1.5, làm thế nào để git sắp xếp này ra? Dù bằng cách nào, dường như là giải pháp tôi đang tìm kiếm ... – cmaughan

0

tôi đã làm nó cho một dự án mẫu về Github được gọi là hesco/hesco-weave như sau:

tôi đã sử dụng curl, jq, cắt và lệnh đuôi trong các ví dụ sau đây, vì vậy bạn cần phải có chúng trước khi chạy các ví dụ.

Đầu tiên, hai thẻ cuối cùng của dự án được tìm thấy:

[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 

Hoặc nếu bạn có một phiên bản checkouted của dự án:

[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 

sha của refs như sau :

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

Thứ hai, một kho git được tạo ra:

[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 

Thứ ba, thẻ v0.8.6 của kho lưu trữ của Github được bổ sung vào kho lưu trữ được tạo ra như cây con: info

[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:

[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 

Cuối cùng, cây con dệt với thẻ mới hơn v0.8.7 được sáp nhập với git subtree pull:

[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(-) 

thông tin Trace:

[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 
Các vấn đề liên quan