2013-03-05 32 views
46

Tôi có một repo được gọi là myrepo trên máy chủ từ xa beanstalk.Git - Bỏ qua các tập tin trong quá trình hợp nhất

Tôi nhân bản nó vào máy cục bộ của mình. Đã tạo thêm hai chi nhánh: stagingdev. Đẩy các chi nhánh này vào điều khiển từ xa.

Bây giờ là:

local     remote     server 
-------------------------------------------------------- 
master ==> Pushes to `master` ==> deployed to `prod` 
staging ==> Pushes to `staging` ==> deployed to `staging` 
dev  ==> Pushes to `dev`  ==> deployed to `dev` 

Tôi có một tập tin gọi là config.xml đó là khác nhau trên từng ngành.

Tôi chỉ muốn bỏ qua tệp này trong quá trình hợp nhất. Nhưng tôi muốn điều này được bao gồm khi tôi thanh toán hoặc cam kết từ/đến chi nhánh repo.

Lý do tôi muốn điều này là, chúng tôi có một kịch bản triển khai kéo (thanh toán) chi nhánh cụ thể và triển khai trên các máy chủ tương ứng. Vì vậy, chúng tôi cần config.xml tệp của chi nhánh cụ thể đó đi vào máy chủ cụ thể như được chỉ ra ở trên khi được triển khai.

Tôi đoán .gitignore sẽ không hoạt động. các tùy chọn khác là gì? Lưu ý rằng tệp bị bỏ qua phải là một phần của thanh toán và cam kết, điều quan trọng. nó chỉ được bỏ qua trong quá trình hợp nhất.

Cảm ơn!

+0

Trong chế độ mặc định của nó, git pull là viết tắt cho git fetch tiếp theo git merge FETCH_HEAD. Vì vậy, bạn tuyên bố loại xung đột với nhau. – zzk

+0

Vâng, tôi sẽ nói, thanh toán của nó. Không kéo. Tôi sẽ cập nhật câu hỏi để rõ ràng. –

+0

có thể trùng lặp của [Git: bỏ qua một số tệp trong quá trình hợp nhất (giữ một số tệp bị giới hạn ở một nhánh)] (http://stackoverflow.com/questions/3868491/git-ignore-some-files-during-a-merge- giữ một số tập tin bị hạn chế-một-chi nhánh) – givanse

Trả lời

26

Tôi đã tìm thấy git attributes. Đang thử nó. Làm việc cho đến nay. Chưa kiểm tra tất cả các tình huống. Nhưng nó phải là giải pháp.

Merge Strategies - Git attributes

+1

bị hỏng ... –

+2

nhưng tôi đã tìm thấy [git-scm.com/book/ch7-2.html#Merge-Strategies](http://git-scm.com/book/ch7- này 2.html # Hợp nhất-Chiến lược) –

+0

Liên kết mới: https://git-scm.com/docs/merge-strategies – Liosan

3

Bạn có thể bắt đầu bằng cách sử dụng git merge --no-commit và sau đó chỉnh sửa hợp nhất theo cách bạn muốn, tức là bằng cách unstaging config.xml hoặc bất kỳ tệp nào khác, sau đó cam kết. Tôi nghi ngờ bạn muốn tự động hóa nó sau đó bằng cách sử dụng móc, nhưng tôi nghĩ rằng nó sẽ được giá trị đi qua thủ công ít nhất một lần.

+0

Thuộc tính 'git' có cung cấp giải pháp thẳng nào không? Tôi không thể hiểu được điều này. http://git-scm.com/book/en/Customizing-Git-Git-Attributes#Merge-Strategies –

2

Bạn có thể sử dụng .gitignore để giữ config.xml khỏi kho lưu trữ và sau đó sử dụng post commit hook để tải tệp config.xml thích hợp lên máy chủ.

+1

Tôi biết đó là loại hack. Tôi đang cố gắng tìm một giải pháp sạch. Điều gì về git 'thuộc tính'. Bất kỳ ý tưởng làm thế nào nó hoạt động? Tôi không thể hiểu được điều này. http://git-scm.com/book/en/Customizing-Git-Git-Attributes#Merge-Strategies –

+1

Tôi chưa từng nghe về điều này, tôi đang cố gắng áp dụng thuộc tính merge = ours, có vẻ đầy hứa hẹn. – tlehman

+1

Các thuộc tính Git thật tuyệt vời! Bạn thậm chí có thể nói với git cách để phân biệt các tệp không phải văn bản, vì vậy bạn có thể sử dụng pdf2text để các tệp PDF khác! – tlehman

42

tôi đã vượt qua vấn đề này bằng cách sử dụng git merge lệnh với 'cam kết --no' tùy chọn và sau đó loại bỏ một cách rõ ràng các tập tin dàn dựng và bỏ qua những thay đổi đối với tập tin. Ví dụ: nói rằng tôi muốn bỏ qua bất kỳ thay đổi myfile.txt tôi tiến hành như sau:

git merge --no-commit <merge-branch> 
git reset HEAD myfile.txt 
git checkout -- myfile.txt 
git commit -m "merged <merge-branch>" 

Bạn có thể đặt câu 2 & 3 trong một vòng lặp for nếu bạn có một danh sách các tập tin để bỏ qua.

+0

Tôi muốn thêm "--no-ff" nếu bạn muốn một tệp không bị ghi đè khi hợp nhất xảy ra trong chiến lược chuyển tiếp nhanh. –

1

Tại đây git-update-index - Đăng ký nội dung tệp trong cây đang hoạt động với chỉ mục.

git update-index --assume-unchanged <PATH_OF_THE_FILE> 

Ví dụ: -

git update-index --assume-unchanged somelocation/pom.xml

+0

Đó là tốt đẹp khi đẩy nhưng vẫn phàn nàn khi kéo có thể ghi đè lên tập tin. – Rolf

+0

bạn đã cố thêm mục nhập tệp của mình vào tệp .gitignore. @Rolf –