2011-09-02 21 views
7

Tôi đã thấy mọi người đề nghị sử dụng git-svn để thực hiện hợp nhất và cam kết trở lại svn.Làm cách nào để sử dụng git-svn để hợp nhất các thay đổi từ thân cây thành chi nhánh trong svn?

Tôi đang tìm hướng dẫn từng bước tốt.

  • Có đáng tiếc không hay tôi nên sử dụng svn để thực hiện điều đó.
  • Mọi người sẽ thấy tôi đã sử dụng git và có bất kỳ dữ liệu meta nào về việc hợp nhất trong svn không?
  • Tôi có thể tạo bản sao thân cây và 1 chi nhánh mà tôi chọn không?
  • Tôi có cần một bản sao đầy đủ hoặc tôi có thể nhập nó từ điểm mà chi nhánh đã được tạo không?
+0

Nó có thể đáng giá và nó sẽ không được hiển thị mà bạn đã sử dụng git thay vì svn. Hãy cực kỳ cẩn thận với cách bạn sử dụng 'git rebase'. Nó thực sự có thể làm cho một mớ hỗn độn của lịch sử svn. –

+0

Loại hợp nhất nào? Đã chọn các cam kết/sửa đổi? Hay đây là một chi nhánh tính năng mà bạn muốn cập nhật với các cam kết từ thân cây, có ý định tái hòa nhập trở lại thân cây không? –

+0

Để biết hướng dẫn từng bước: từ http://myhumblecorner.wordpress.com/2011/08/25/git-svn-cheatsheet-for-git-rebels-in-an-svn-workplace/ 'git checkout ; git merge --squash ; git commit; git svn dcommit # --squash là key' –

Trả lời

3

là nó có giá trị rắc rối hoặc tôi nên chỉ sử dụng svn để làm điều đó.

Tôi nghĩ điều đó phụ thuộc vào cách bạn có nhiều thông tin bạn muốn giữ lại trong SVN. Nếu bạn thực hiện hợp nhất bằng git, tôi tin SVN sẽ không biết những thay đổi đến từ đâu, hay nói cách khác, nó sẽ giống như thân cây và nhánh SVN vẫn còn tách biệt.

mọi người sẽ thấy tôi đã sử dụng git và có bất kỳ dữ liệu meta về merge trong svn?

Không, nó sẽ giống như một cam kết mới vào thân cây.

Tôi có thể tạo bản sao thân cây và 1 chi nhánh mà tôi chọn không?

Nếu bạn có nghĩa là sao chép git-svn của bạn thành một repo git mới, sau đó có. Chỉ cần sao chép git-svn và xóa các nhánh không liên quan, hoặc làm điều đó trực tiếp trong repo git-svn trước khi bạn sao chép.

Đây là bài đăng về cách convert an SVN repo to a git one. Tôi nghĩ rằng hầu hết nó sẽ được áp dụng trong tình huống này.

Tôi có cần một bản sao đầy đủ hoặc tôi có thể nhập nó từ điểm mà chi nhánh được tạo không?

Các bản sao Git thường sẽ là bản sao đầy đủ, trừ khi bạn sử dụng tùy chọn --depth. Nếu bạn muốn vứt bỏ lịch sử trước đó, bạn luôn có thể đè bẹp tất cả các cam kết thành một cũ hơn, hoặc chỉ cần xóa thư mục .git và bắt đầu một repo mới.

+2

Git có thể tạo một phần bản sao xem http://stackoverflow.com/questions/747075/how-to-git-svn-clone-the-last-n-revisions-from-a-subversion-repository – hdorio

+0

@Doud, cảm ơn sự điều chỉnh. – cmcginty

1

Tôi đã đọc một vài bài viết của mọi người cho thấy điều này, nhưng tôi nghĩ nó chỉ nên được sử dụng nếu cả hai bạn làm việc với GIT và SVN cho cùng một mã (repo cục bộ với git và repo được lưu trữ với svn). Tôi sẽ khuyên bạn nên chỉ dính vào VCS của bạn và có được một công cụ hợp nhất thích hợp như BeyondCompare hoặc Kaleidoscope

Một hướng dẫn nhỏ về git-svn có thể được tìm thấy tại

http://flavio.castelli.name/howto_use_git_with_svn

+0

+1 Đây là một bài đăng blog hay nhưng nó không bao gồm việc hợp nhất. –

10

Tôi đã sử dụng hướng dẫn trong bài đăng này với nhiều thành công.http://justaddwater.dk/2009/03/09/using-git-for-svn-repositories-workflow/

Tôi sử dụng git để hợp nhất giữa các nhánh rồi chuyển chúng vào repo svn. Điều này không làm theo các thủ tục hợp nhất cho svn và do đó, điều này có thể là vấn đề cho người dùng khác. thuộc tính svn: merge không được đặt

git-svn không để lại bất kỳ bằng chứng nào trong repo svn mà bạn đang sử dụng git-svn.

+1

+1 Câu trả lời hay nhất cho đến nay. Và bởi vì bạn là Dave. –

+0

Tôi nghĩ rằng tôi đang thiếu một cái gì đó. Bạn đang nói rằng các chi nhánh SVN sẽ hiển thị như là các chi nhánh git trong "git branch -a"? Các chi nhánh duy nhất tôi thấy có những cái tôi đã tạo ra và "remotes/git-svn". Các chi nhánh SVN chỉ hiển thị như là cấu trúc thư mục của họ. Những hướng dẫn này khiến tôi tự hỏi liệu SVN có khái niệm chi nhánh phía máy chủ mà chúng tôi không sử dụng ở đây hay không. – benkc

+0

Nếu bạn tìm thấy điều này, bạn đã bỏ lỡ tùy chọn -s trong git clone. – boutta

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