2013-08-30 62 views
17

Trong kho lưu trữ A thư mục sub được bao gồm dưới dạng git subtree của kho lưu trữ S - trỏ đến chi nhánh master.git subtree: có thể thay đổi nhánh/đường dẫn con trong một kho lưu trữ được chia nhỏ không?

Tôi có kho lưu trữ chia đôi A thành F. Bây giờ tôi muốn làm một trong những trong sau F:

  • thay đổi sub sử dụng một chi nhánh khác nhau của S (tức develop chi nhánh)
  • hay: thay đổi sub sử dụng một kho lưu trữ khác nhau hoàn toàn

Có thể là một trong những điều này, và nếu có, làm thế nào? Sẽ có bất kỳ phản ứng phụ nào mà tôi nên biết không?

Và làm thế nào tôi có thể đảm bảo thay đổi về subtree của mình sẽ không được cập nhật trong kho lưu trữ A khi tôi hợp nhất các thay đổi của mình (yêu cầu kéo)? Tôi có nghĩa là bên cạnh việc cô lập các cam kết.

Trả lời

28

Nếu bạn sử dụng git subtree (và không phải git submodule) để tạo cây con, thì đó chỉ là một thư mục bình thường. Để chuyển nó sang nhánh khác, chỉ cần xóa nó và tạo lại cây con từ nhánh mới. Đây là:

git rm <subtree> 
git commit 
git subtree add --prefix=<subtree> <repository_url> <branch> 

Điều đó sẽ hoạt động không có vấn đề gì.

+0

và điều đó sẽ không được đồng bộ hóa ngược dòng? Tôi đoán tôi sẽ thử một lần. – LearnCocos2D

+0

Nó sẽ không được đồng bộ hóa ngược dòng. '' không được lưu ở bất cứ đâu; nó chỉ được sử dụng cho lệnh để biết nơi lấy các tệp từ đó. Sau đó, bạn nhận được một subdir bình thường trong kho của bạn. – elmart

+0

Ah ok, tôi thấy rằng bây giờ ... subtree chỉ đơn giản là "bản sao" trạng thái của một cam kết của một kho lưu trữ, như thể tôi đã sao chép nó bằng tay (nhưng giữ lại lịch sử cam kết và những gì không). Vì vậy, điều đó không thay đổi vấn đề ban đầu của tôi không đồng bộ hóa một thư mục cụ thể giữa hai kho lưu trữ, nhưng đủ câu trả lời cho câu hỏi này. – LearnCocos2D