2011-10-21 33 views
10

Tôi phát triển một số tập lệnh để xử lý cơ sở dữ liệu và tệp PDF của bibtex.git chỉ đẩy một phần của kho lưu trữ

Để thuận tiện, tôi quản lý cả cơ sở dữ liệu và tập lệnh trong cùng một kho lưu trữ git (một thứ tôi không muốn thay đổi). Tuy nhiên, tôi muốn cung cấp các tập lệnh của mình (ví dụ: trên github) nhưng không phải là cơ sở dữ liệu hoặc tệp pdf của tôi. Tuy nhiên, tôi muốn có cùng một cam kết-lịch sử cả trên github và cục bộ cho các kịch bản.

Tôi nghĩ đến việc có nhánh github và chỉ đẩy chi nhánh này. Nhưng làm thế nào tôi có thể cập nhật nhánh với các commit được thực hiện cho các script trong nhánh master?

Có cách nào khác để thực hiện việc này không?

Trả lời

1

Nhưng làm cách nào tôi cập nhật chi nhánh với các cam kết được thực hiện cho các tập lệnh trong nhánh chính?

Cherry-pick các cam kết liên quan đến tập lệnh từ master vào chi nhánh công. Hoặc, chỉnh sửa các tập lệnh trong nhánh của riêng mình, sau đó hợp nhất các thay đổi thành master khi bạn cần chúng.

+0

nhưng việc lựa chọn anh đào không chỉ nhận được những thay đổi được thực hiện bởi cam kết này? Giả sử tôi đã thực hiện một số cam kết trong master, một số liên quan đến db một số kịch bản, tôi sẽ phải chắc chắn để chọn tất cả các kịch bản liên quan đến những người thân, phải (không chỉ mới nhất)? Tôi đoán các chi nhánh riêng biệt-với-hợp nhất là thay thế tốt hơn ... – thias

+0

@thias: đó là lý do tại sao tôi muốn khuyên bạn nên phát triển các kịch bản trong các chi nhánh công cộng thay vì 'master'. Hoặc sử dụng repos riêng biệt ... –

+0

ok, tôi sử dụng một chi nhánh riêng ... – thias

9

Bạn có thể sử dụng git subtree để tách thư mục tập lệnh thành chi nhánh riêng của chúng (với lịch sử hoàn chỉnh cho thư mục con đó) mà bạn có thể chuyển sang GitHub. Bạn có thể chạy git subtree một lần nữa để giữ cho kho lưu trữ chia nhỏ được cập nhật.

Để đưa ra một ví dụ, một khi bạn đã cài đặt git subtree bạn có thể làm:

git subtree split --prefix script-directory --branch just-scripts 
git push github-scripts just-scripts:master 

... giả định rằng kịch bản của bạn là trong script-directory, và github-scripts là một từ xa trỏ đến URL của GitHub của bạn kho lưu trữ dành cho chỉ các tập lệnh.

+0

Điều đó có vẻ thú vị! Nhưng làm cách nào tôi cập nhật chi nhánh mới? Hoặc tôi sẽ chỉ xóa nó sau khi đẩy và chạy các lệnh một lần nữa cho lần đẩy tiếp theo? – thias

+0

Bạn có thể chạy lại lệnh tương tự mà không xóa nhánh và nó sẽ cập nhật nó (tôi nghĩ). –

+0

@Mark, chỉ cần tự hỏi, là nó có thể làm điều này trong một dòng - một cái gì đó giống như git push --split subDir - vì lợi ích của sự đơn giản. – shabunc

1

Tôi theo lời khuyên của @larsmans và hóa ra rất thuận tiện. Dưới đây là một số chi tiết cho các thủ tục:


## getting the scripts into a separate branch for github 

# create a root branch 'scripts' 
git symbolic-ref HEAD refs/heads/scripts 
rm .git/index 
git clean -fdx # WARNING: all non-commited files, checked in or not, are lost! 
git checkout master script1.py script2.py 
git commit -a -m "got the original scripts" 
git checkout master 
git merge scripts 

# push the scripts branch to github 
$ git remote add github [email protected]:username/repo.git 
$ git push github scripts 

Bây giờ tôi có thể phát triển trong các kịch bản chi nhánh và hợp nhất với các chi nhánh tổng thể bất cứ khi nào tôi cần nó cho cơ sở dữ liệu của tôi.

Một báo trước: Việc hợp nhất đầu tiên sau khi thêm tệp mới trong cả hai nhánh sẽ dẫn đến xung đột (vì nhánh tập lệnh là nhánh nhánh). Vì vậy, tốt nhất là lấy các kịch bản từ nhánh chính và cam kết chúng ngay lập tức.

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