2010-02-22 31 views
11

tình hình của tôi:Git: có cách nào nhanh hơn để hợp nhất từ ​​một chi nhánh đến nhiều chi nhánh hơn là thực hiện từng bước một không?

Tôi vừa mới tham gia ở phía front-end của một dự án thành lập có liên quan đến một số lượng ngày càng tăng của các trường hợp của một ứng dụng đường ray, mỗi trong số đó mà khác nhau về một số khía cạnh (quan điểm, phong cách , cài đặt, v.v.) nhưng tất cả đều chia sẻ phần lớn mã kết thúc ngược của họ.

Git chúng tôi repo có một số chi nhánh trông giống như sau:

master 
apple 
banana 
cherry 
... 
strawberry 
tangerine 
... 

đâu từng ngành trái cây có nguồn gốc từ là giữ mã sản xuất cho một trường hợp sản xuất.

(Master không được sử dụng cho việc triển khai trực tiếp nhưng có chứa tất cả các mã được chia sẻ và là những gì chúng ta muốn sao chép từ thiết lập một ví dụ mới.)

Vấn đề của tôi:

làm việc cụ thể cho một cá thể đơn giản là đủ, diễn ra trong đó trong nhánh (hoặc một chi nhánh dev của nó) v.v ...

Tuy nhiên, nếu tôi cần thực hiện thay đổi sẽ ảnh hưởng đến tất cả các vị trí trong cụm Tôi làm điều đó tại thời điểm này trong một chi nhánh dev và hợp nhất nó vào master, và sau đó (những gì đang làm tôi lo lắng) phải manuall y kiểm tra từng chi nhánh sản xuất lần lượt và hợp nhất tổng thể vào nó.

Ngay cả bộ não khỉ mã khiêm tốn của tôi có thể thấy rằng điều này không có quy mô tốt.

Hiện tại chúng tôi có 8 nhánh sản xuất, vì vậy nó không phải là xấu, nhưng kế hoạch là để tăng trưởng và đến thời điểm này thậm chí 20 (cho phép một mình 50+) nó sẽ là một nỗi đau nghiêm trọng. Nó cũng sẽ là nỗi đau cá nhân của tôi, vì tôi là người có khả năng đối phó với nó trên cơ sở hàng ngày.

Vì vậy, câu hỏi thực tế của tôi sẽ là:

  • Có cái gì đó trong các chức năng git lõi mà tôi đang thiếu đó sẽ cho tôi thanh lịch kết hợp từ bậc thầy thành n ngành khác trong một ngã swoop? (không chắc tôi nghĩ, nhưng đáng để hỏi) Tuy nhiên, có thể có một cách để làm điều này với một số kịch bản shell xảo quyệt? (trong đó tôi có thể thêm, tôi biết rất ít và hiểu thậm chí ít hơn)

Nếu sau này có ai giúp tôi bắt đầu/chỉ cho tôi đúng hướng không?

Rất cám ơn trước vì đã dành thời gian và trợ giúp của bạn.

Trả lời

8

Trước khi tôi trả lời câu hỏi này, tôi muốn nói rõ rằng đây chỉ là ý tưởng hay trong các trường hợp như vậy, nơi các chi nhánh hợp nhất thành các nhánh sản xuất chứ không phải là chi nhánh phát triển. Nếu bạn đã tìm thấy bài đăng này tìm kiếm một cách để hợp nhất các nhánh tích hợp (master) vào tất cả các chủ đề (phát triển) của bạn, câu trả lời là bạn gần như chắc chắn không nên (see here).

Được rồi, và câu trả lời thực sự. Không có cách nào được tích hợp sẵn, bởi vì (giả sử nó không phải là tiến nhanh), bạn thực sự phải có các tệp được kiểm tra để git thực hiện phép thuật hợp nhất của nó.May mắn thay, bạn không thực sự làm nhiều (git checkout && git merge) do đó không có vấn đề gì khi viết một kịch bản. Bạn có thể làm phức tạp điều này với tệp cấu hình hoặc thậm chí thêm một số công cụ tùy chỉnh vào .git/config (ví dụ: git config branch.<branchname>.productionbranch true và sau đó sử dụng lệnh git để kiểm tra nhánh nào có bộ cờ đó), nhưng cách đơn giản nhất sẽ là như sau:

#!/bin/bash 

production_branches=(branch1 branch2 branch3) 

for branch in ${production_branches[@]}; do 
    if ! (git checkout $branch && git merge master); then 
     exit 
     # Exit on the first error 
     # If you want to just plow ahead, do something like this: 
     # git reset --hard  # make sure there aren't merge conflicts in the tree 
     # failed_merges="$failed_merges $branch" # remember for later 
    fi 
done 

# if you plowed ahead above, print the branches which failed to checkout+merge 
# if [ -n "$failed_merges" ]; then 
#  echo "Failed merges: $failed_merges" 
# fi 

Luôn có nhiều cải tiến bạn có thể thực hiện. Ví dụ, bạn có thể sử dụng một số lệnh git để kiểm tra xem tổng thể đã được hợp nhất vào một nhánh cụ thể chưa, và tránh kiểm tra nó. Nếu bạn đang di chuyển trên quá trình sáp nhập không thành công, bạn có thể thực hiện thanh toán và hợp nhất riêng trong trường hợp thanh toán không thành công (điều đó có nghĩa là cây làm việc dơ bẩn, nghĩa là tất cả chúng đều thất bại). Hy vọng rằng điều này là đủ để giúp bạn bắt đầu mặc dù!

+0

Xin chào Jefromi, cảm ơn câu trả lời rất rõ ràng và hữu ích - thời gian để tôi bị bẩn tay Tôi nghĩ ... –

+0

+1 cho bài viết tuyệt vời mà bạn đã liên kết! –

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