Theo the manual, git dcommit
"sẽ tạo bản sửa đổi trong SVN cho mỗi cam kết trong git." Nhưng có cách nào để tránh nhiều bản sửa đổi Subversion không? Nghĩa là, để git kết hợp tất cả các thay đổi trước khi thực hiện svn commit
?Có thể thực hiện kết quả git svn dcommit trong một cam kết svn không?
Trả lời
Nếu bạn làm việc trên chi nhánh trong git, bạn có thể git-merge --squash
, thực hiện điều đó trong git. Sau đó, bạn có thể đẩy một người bị quăng vào SVN.
Tất nhiên, rất nhiều cam kết nhỏ là tốt, vậy tại sao bạn muốn đánh bóng chúng?
Cảm ơn!(Thông thường tôi sẽ muốn nhiều cam kết nhỏ, nhưng điều này liên quan đến một dự án khách hàng mà tôi và đối tác của tôi cần phải thường xuyên đẩy các thay đổi giữa nhau và thậm chí thay đổi thường xuyên sẽ phá vỡ thân cây.) – plindberg
Tại sao cả hai bạn không làm việc trên cùng một chi nhánh (svn), sau đó? –
Tôi sử dụng nhiều cam kết nhỏ để dễ dàng theo dõi các thay đổi; khi tôi dcommit đến máy chủ svn, chúng tôi tạo ra một email cho mỗi cam kết SVN. Tôi muốn làm công việc phụ của việc sáp nhập trở lại để làm chủ với squash cho "đơn vị hợp lý" cam kết và lưu tất cả mọi người một vài email. – cbowns
Lệnh git rebase -i
có thể thực hiện việc này và hơn thế nữa. Lệnh này cực kỳ mạnh mẽ, vì vậy rất tốt khi kết bạn với nó.
Cú pháp là: git rebase -i <commit ID>
. Điều này sẽ trả về trình soạn thảo văn bản của bạn, với các tùy chọn (và các hướng dẫn) để sửa đổi tất cả các cam kết tối đa (không bao gồm) ID đã cho.
Ví dụ, để thay đổi 5 cam kết trước đó, bạn có thể làm điều này:
git rebase -i HEAD~5
Hoặc nếu chi nhánh SVN của bạn được gọi là "svn/trunk", sau đó cú pháp này là tốt quá:
git rebase -i svn/trunk
Sau đó, cửa sổ soạn thảo văn bản sẽ bật lên. Để squash tất cả mọi thứ, thay đổi từ đầu tiên của mỗi dòng sau khi đầu tiên từ "chọn" để "bí" (Nếu điều này nghe có vẻ khó hiểu - nó sẽ có ý nghĩa hơn khi bạn nhìn thấy nó). Sau đó lưu và đóng trình chỉnh sửa. Sau đó, bạn sẽ có cơ hội chỉnh sửa thông điệp cam kết cho cam kết bị đè bẹp.
Trong số những thứ khác bạn có thể thực hiện với git rebase -i
, đang sắp xếp lại các cam kết, cam kết nghiền theo các cách khác nhau và xóa các cam kết.
Tôi sử dụng lệnh này liên tục; đó là một tính năng sát thủ của Git.
Ryan Tomayko đã viết một chút về git rebase -i
, mà ông nói:
... [đó là] một chút như git commit --amend nhảy lên trên axit và giữ một chainsaw - hoàn toàn mất trí và khá nguy hiểm nhưng có khả năng phơi bày hoàn toàn trạng thái mới của tâm trí. Tại đây, bạn có thể chỉnh sửa, bí, sắp xếp lại, trêu chọc nhau và chú thích các cam kết hiện có theo cách dễ dàng và trực quan hơn nó phải là.
Tôi có một xu hướng để thực hiện thường xuyên trong git, nhưng không nhất thiết muốn dcommit mỗi cam kết svn, và đè bẹp tất cả các công việc của tôi làm chỉ càng ít ý nghĩa. Tôi đang thử nó ngay bây giờ để sắp xếp lại và squash một vài với nhau thành các đơn vị cam kết hợp lý hơn bây giờ.
- 1. Quay hoặc chỉnh sửa một số cam kết trước khi thực hiện git-svn dcommit?
- 2. Là git svn dcommit atomic?
- 3. git-svn dcommiting một git cam kết duy nhất
- 4. Yêu cầu git svn rebase trước git svn dcommit?
- 5. Có cách nào để "git svn dcommit" từ một kho git-svn nhân bản:
- 6. git-svn cố gắng cam kết sai chi nhánh
- 7. Trạng thái git svn - hiển thị các thay đổi không được cam kết với svn
- 8. Làm cách nào để hoàn tác một git svn dcommit?
- 9. Tại sao git svn dcommit mất lịch sử kết hợp các cam kết cho các chi nhánh địa phương?
- 10. SVN Cam kết các tệp cụ thể
- 11. Git Svn tai ương, tại sao oh tại sao tôi không bao giờ có thể dcommit?
- 12. SVN cam kết Lỗi "Cam kết chỉ có thể cam kết vào một kho lưu trữ tại một thời điểm."
- 13. Nguồn gốc của tên 'dcommit' trong git svn dcommit là gì?
- 14. git-svn hợp nhất và cam kết chi tiết
- 15. Cam kết không thành công: xác thực svn: hủy bỏ
- 16. SVN có tương đương với cam kết của git (không có push) không?
- 17. Cam kết lưu trữ vào SVN Repository
- 18. SVN cam kết với ngày/giờ cũ
- 19. Cấp chi nhánh SVN cam kết quyền
- 20. Vô tình cam kết thư mục .svn
- 21. Có menu nào tương tác như cam kết cho SVN như Git có --interactive không?
- 22. Lỗi SVN - 501 Cam kết không thực hiện không thành công
- 23. Loại trừ một số tệp trên dòng lệnh svn cam kết (không phải svn: ignore)
- 24. Khá SVN cam kết email: mẫu
- 25. Git: truy xuất cam kết cụ thể
- 26. Thực hiện cam kết tự động git
- 27. git svn dcommit không tìm thấy những thay đổi và đặt lại đầu
- 28. Truy cập vào '/ svn/ctm /! Svn/me' bị cấm Khi cam kết với máy chủ svn?
- 29. Cam kết SVN mà không cần cập nhật
- 30. Hooks cho git-svn
Tôi gặp vấn đề tương tự. Hãy tưởng tượng rằng bạn sao chép một repo svn để git làm chủ của bạn, bạn thực hiện 3 cam kết với các thông điệp khác nhau và sau đó sử dụng git svn dcommit. Có thể "hợp nhất" 3 cam kết này trong một đơn lẻ không? Làm thế nào bạn có thể làm điều đó ? Bạn có thể cho chúng tôi một ví dụ ? Thnks! – sergiofbsilva
Có thể trùng lặp của [Kết hợp Git cục bộ cam kết vào một cam kết cho git-svn] (http://stackoverflow.com/questions/1408381/combine-local-git-commits-into-one-commit-for-git-svn) – centic