Git: Chuyển đổi


Các khóa học miễn phí qua video:
Lập trình C Java C# SQL Server PHP HTML5-CSS3-JavaScript
Chuyển đổi sang Git

Bước tiếp theo trong quá trình di chuyển từ SVN sang Git là nhập nội dung của kho SVN vào kho Git mới. Chúng tôi sẽ làm điều này với tiện ích git svn được bao gồm trong hầu hết các bản phân phối Git, sau đó chúng tôi sẽ dọn sạch kết quả với svn-migration-scripts.jar.

Xin lưu ý rằng quá trình chuyển đổi có thể mất một lượng thời gian đáng kể cho các kho lưu trữ lớn hơn, ngay cả khi nhân bản từ kho lưu trữ SVN cục bộ. Là một điểm chuẩn, chuyển đổi một kho lưu trữ 400 MB với 33.000 cam kết trên bản gốc mất khoảng 12 giờ để hoàn thành.

Đối với các kho lưu trữ có kích thước hợp lý, các bước sau nên được chạy trên máy tính cục bộ của người di chuyển. Tuy nhiên, nếu bạn có kho lưu trữ SVN rất lớn và muốn giảm thời gian chuyển đổi, bạn có thể chạy git svn clonetrên máy chủ SVN thay vì trên máy cục bộ của người di chuyển. Điều này sẽ tránh được chi phí nhân bản thông qua kết nối mạng.

Sao chép kho SVN

Các git svn clonelệnh biến đổi thân cây, cành, và các thẻ trong kho SVN của bạn thành một kho Git mới. Tùy thuộc vào cấu trúc của repo SVN của bạn, lệnh cần được cấu hình khác nhau.

Di chuyển Git: lệnh git svn clone

Bố cục tiêu chuẩn SVN

Nếu dự án SVN của bạn sử dụng các tiêu chuẩn /trunk, /branchesvà /tagsbố trí thư mục, bạn có thể sử dụng các --stdlayouttùy chọn thay vì bằng tay xác định cấu trúc của kho. Chạy lệnh sau trong ~/GitMigrationthư mục:

git svn clone --stdlayout --authors-file=authors.txt
<svn-repo>/<project> <git-repo-name>

Trong trường hợp <svn-repo>là URI của kho SVN mà bạn muốn di chuyển và, <project>là tên của dự án mà bạn muốn nhập khẩu, và <git-repo-name>là tên thư mục của các kho Git mới.

Ví dụ: nếu bạn đang di chuyển một dự án được gọi là Confluence, được lưu trữ trên đó https://svn.atlassian.com, bạn có thể chạy như sau:

git svn clone --stdlayout --authors-file=authors.txt
https://svn.atlassian.com/Confluence ConfluenceAsGit

Bố cục SVN không chuẩn

Nếu kho SVN của bạn không có một bố cục chuẩn, bạn cần cung cấp các địa điểm của thân cây của bạn, ngành, và các thẻ bằng cách sử dụng --trunk, --branchesvà --tagstùy chọn dòng lệnh. Ví dụ: nếu bạn có các nhánh được lưu trữ trong cả /branchesthư mục và /bugfixesthư mục, bạn sẽ sử dụng lệnh sau:

git svn clone --trunk=/trunk --branches=/branches
--branches=/bugfixes --tags=/tags --authors-file=authors.txt
<svn-repo>/<project> <git-repo-name>

Kiểm tra kho Git mới

Sau khi git svn cloneđã hoàn tất (điều này có thể mất một thời gian), bạn sẽ thấy một thư mục mới có tên gọi <git-repo-name>trong ~/GitMigration. Đây là kho Git được chuyển đổi. Bạn sẽ có thể chuyển sang <git-repo-name>và chạy bất kỳ lệnh Git tiêu chuẩn nào để khám phá dự án của bạn.

Các nhánh và thẻ không được nhập vào kho Git mới như bạn mong đợi. Bạn sẽ không tìm thấy bất kỳ chi nhánh SVN nào của mình ở git branchđầu ra, và bạn cũng sẽ không tìm thấy bất kỳ thẻ SVN nào trong git tagđầu ra. Nhưng, nếu bạn chạy git branch -r, bạn sẽ tìm thấy tất cả các nhánh và thẻ từ kho SVN của mình. Các git svn clonelệnh nhập khẩu chi nhánh SVN của bạn như các chi nhánh và nhập khẩu thẻ SVN của bạn càng chi nhánh từ xa bắt đầu bằng từ xa tags/.

Di chuyển Git: cấu trúc của nhân bản Git repo

Hành vi này làm cho các quy trình đồng bộ hóa hai chiều nhất định trở nên dễ dàng hơn, nhưng nó có thể rất khó hiểu khi cố gắng thực hiện Git di chuyển một chiều. Đó là lý do tại sao bước tiếp theo của chúng tôi sẽ là chuyển đổi các nhánh từ xa này thành các nhánh cục bộ và thẻ Git thực tế.

Làm sạch kho Git mới

Tập clean-gitlệnh bao gồm svn-migration-scripts.jarbiến các nhánh SVN thành các nhánh Git cục bộ và các thẻ SVN thành các thẻ Git chính thức. Lưu ý rằng đây là một hoạt động phá hoạivà bạn sẽ không thể di chuyển các xác nhận từ kho lưu trữ Git trở lại kho lưu trữ SVN.

Nếu bạn đang theo hướng dẫn di chuyển này, đây không phải là vấn đề, vì nó ủng hộ đồng bộ một chiều từ SVN sang Git (kho lưu trữ Git được coi là chỉ đọc cho đến sau bước Di chuyển ). Tuy nhiên, nếu bạn dự định cam kết với kho Git và kho SVN trong quá trình di chuyển, bạn không nên thực hiện các lệnh sau. Đây là một nhiệm vụ nâng cao, vì không được khuyến nghị cho dự án điển hình.

Để xem những gì có thể được dọn sạch, hãy chạy lệnh sau trong ~/GitMigration/<git-repo-name>:

java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar clean-git

Điều này sẽ tạo ra tất cả các thay đổi mà tập lệnh muốn thực hiện, nhưng thực tế nó sẽ không thực hiện bất kỳ thay đổi nào. Để thực hiện những thay đổi này, bạn cần sử dụng --forcetùy chọn, như vậy:

java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar clean-git
--force

Bây giờ bạn sẽ thấy tất cả các nhánh SVN của bạn ở git branchđầu ra, cùng với các thẻ SVN của bạn ở git tagđầu ra. Điều này có nghĩa là bạn đã chuyển đổi thành công dự án SVN của mình sang kho Git.

Tóm lược

Trong bước này, bạn đã biến một kho lưu trữ SVN thành một kho lưu trữ Git mới bằng git svn clonelệnh, sau đó dọn sạch cấu trúc của kho lưu trữ kết quả với svn-migration-scripts.jar. Trong bước tiếp theo, bạn sẽ tìm hiểu cách giữ đồng bộ Git mới này đồng bộ hóa với bất kỳ cam kết mới nào đối với kho lưu trữ SVN. Đây sẽ là một quá trình tương tự như chuyển đổi, nhưng có một số cân nhắc về quy trình làm việc quan trọng trong giai đoạn chuyển đổi này.


Các khóa học miễn phí qua video:
Lập trình C Java C# SQL Server PHP HTML5-CSS3-JavaScript
« Prev: Git: Chuẩn bị
» Next: Git: Đồng bộ hóa
Copied !!!