2015-02-18 20 views
5

Tôi có mã Git repo Old mà tôi muốn chuyển vào thư mục con sub của repo Git hiện có New. Tôi có hai chi nhánh, masterfeature, trong phạm vi Old mà tôi cũng muốn chuyển qua; Old\master chỉ cần hợp nhất thành New\master và phải có chi nhánh mới trong New được gọi là old-feature.Di chuyển một kho lưu trữ Git vào thư mục con của thư mục khác với chi nhánh

Tôi không quá lo lắng về lịch sử sạch sẽ; quy trình hiện tại của tôi là chỉ cần thực hiện git mv trong Old trước khi thực hiện di chuyển và điều đó tốt với tôi. Tôi thích tránh lịch sử viết lại, nếu có thể.

bước di cư hiện tại của tôi là như sau (trong New repo):

  • git remote add -f old ...
  • Tạo mới old-feature chi nhánh từ master.
  • Tạo địa phương feature chi nhánh từ old/feature.
  • Chi nhánh hợp nhất feature ->old-feature.
  • Hợp nhất chi nhánh old/master ->master.
  • Đẩy cả hai nhánh.

Trong khi làm việc này, tôi thấy rằng sau này nếu tôi nhập old-feature-master, Git không hiểu lịch sử (Ý tôi là lịch sử messed-up của tôi) và đối xử với mỗi tập tin là một cuộc xung đột nhập. Tôi làm cách nào để di chuyển đúng cách duy trì mối quan hệ chi nhánh?

+0

Bạn làm gì với 'git mv' trong' cũ'? Ví dụ. là bạn di chuyển tất cả các tập tin và thư mục từ 'Cũ' vào' Cũ \ phụ'? –

+1

Hai repos có bất kỳ cam kết chung nào để bắt đầu không? –

+0

@ShaunLuttin: Vâng, bây giờ tôi đang chuyển chúng thành 'phụ' trong khi chúng vẫn còn trong 'Cũ', và sau đó thực hiện di chuyển. Hai kho lưu trữ không có điểm chung. –

Trả lời

0

Trong khi điều này thuộc về một nhận xét dài không phải là câu trả lời, tôi muốn cho bạn thấy kết quả mà tôi đã đạt được bằng cách làm theo quy trình của bạn với hai repo riêng biệt, để tôi có thể hỏi cách nhật ký mẫu dưới đây không đạt yêu cầu. (Lưu ý:. Tôi chỉ có một cuộc xung đột nhập mà là cho README.md tập tin trong cả hai Repos)

PowerShell

> cd Old 
> git commit --allow-empty -m "A commit from Old" 
> dir -Exclude sub | % { Move-Item $_ sub } 
> git add -A; git commit -m "Move all to sub" 
> cd ..\New 
> git remote add old -f <full-path-to-Old> 
> git checkout master 
> git checkout -b old-feature 
> git branch feature old/feature 
> git merge feature 
> git log --oneline --graph --all --decorate -20 

Result Log

* 4b636e7 (HEAD, master) Merge remote-tracking branch 'old/master' 
|\ 
| * 4aa5741 (old/master) Move all to sub 
| * 158c921 Commit from old/master. 
| * c258979 Commit from old/master. 
| * b00b001 Commit from old/master. 
| * b0b582b Commit from old/master. 
| * b6487e1 Commit from old/master. 
| * 15b676a Commit from old/master. 
| * 9db62a7 Commit from old/master. 
| * 1ff5856 Commit from old/master. 
| | * f8475cb (old-feature) Merge 
| | |\ 
| |//
|/| | 
| | * 54e0f30 (old/feature, feature) Commit from old/feature. 
| | * 999e6b5 Commit from old/feature. 
* | | f0dd795 (origin/master) Commit from new/master. 

Tôi không chắc chắn những gì bạn có nghĩa là khi bạn muốn "duy trì mối quan hệ chi nhánh". Bạn muốn thay đổi điều gì về lịch sử được minh họa trong ví dụ của tôi?

Các vấn đề liên quan