2010-03-23 19 views
7

Tôi là sinh viên tốt nghiệp với nhiều tập lệnh, dữ liệu thư mục trong bibtex, dự thảo luận án bằng latex, thuyết trình trong văn phòng mở, áp phích trong scribus, và số liệu và dữ liệu kết quả. Tôi muốn đặt tất cả mọi thứ trong một dự án dưới sự kiểm soát phiên bản. Sau đó, khi tôi cần làm việc trên một phần như dữ liệu thư mục, tôi muốn kiểm tra thư mục con đó, sửa đổi nó khi cần thiết và hợp nhất lại. Tôi muốn có khả năng kiểm tra một phiên bản cho máy tính ở nhà của tôi và một cái khác với máy tính công việc của tôi và thực hiện các thay đổi cho mỗi máy tính độc lập và cuối cùng hợp nhất chúng lại. Tôi cũng muốn có thể kiểm tra một đoạn mã từ dự án lớn này và nhập nó với phiên bản vào một dự án riêng biệt. Nếu tôi có thể thay đổi, tôi muốn có thể hợp nhất chúng lại với dự án gốc.Git subtree không đúng cách sử dụng .gitignore khi thực hiện một phần bản sao

Dựa trên sự hiểu biết của tôi, git subtree có thể thực hiện việc này.

http://github.com/apenwarr/git-subtree

Có một ví dụ đó là dọc theo dòng của những gì tôi đang cố gắng để làm tại địa chỉ:

http://psionides.jogger.pl/2010/02/04/sharing-code-between-projects-with-git-subtree/

Say cốp dự án của tôi chứa các thư mục: (Yếm bin cfg dữ liệu fig src todo).

Khi tôi sử dụng

git subtree split -P bib -b export 
git checkout export 

tôi nhận được một thư mục Yếm, cộng tất cả các file mà lẽ ra phải được bỏ qua hoặc coi nhị phân dựa trên .gitignore như thư mục src và tất cả mọi thứ trong nó kết thúc bằng một dấu ngã hoặc thư mục ./data.

[email protected]:~/research/trunk$ ls * -r 
biblography.bib JabRef 

src: 
script1.sh~ README~   script2.sh~ 
script3.sh~ script4.R~ script5.awk~ 
script5.py~ 

cfg: 
cfgFile1.ini~ cfgFile2.ini~ cfgFile3.ini~ 

bin: 
bigBinaryPackage1 bigBinaryPackage2 

[email protected]:~/research/trunk$ 

tập tin .gitignore của tôi là như sau:

*.doc diff=word 
*.tex diff=tex 
*.bib diff=bibtex 
*.py diff=python 
*.eps binary 
*.jpg binary 
*.png binary 
./bin/* binary 
*~ 

Làm thế nào để ngăn chặn điều này?

+1

Bạn đã xem xét sử dụng mô-đun con? Chúng được thiết kế cho loại điều này, và tự động hơn một chút ... – Cascabel

+1

Cảm ơn bạn đã bình luận. Subtree được cho là có nhiều lợi thế được nêu tại: http://apenwarr.ca/log/?m=200904#30 –

+0

@D W: Đó là công bằng - mô-đun nhỏ không hoàn hảo. Chỉ muốn chắc chắn rằng nó đã được ra khỏi đó như là một lựa chọn. – Cascabel

Trả lời

4

Dường như tôi giống như tất cả những tệp bị bỏ qua đó không thực sự nằm trong repo của bạn - chúng chỉ còn sót lại từ lần thanh toán trước của bạn.

Vì bạn đã trích xuất một cây con cụ thể khỏi dự án ban đầu, tệp .gitignore của bạn không còn tồn tại nữa, do đó các tệp không còn bị "bỏ qua", vì vậy bạn sẽ thấy chúng ở trạng thái git. Nhưng chúng cũng không phải là một phần của repo của bạn; họ chỉ ngồi đó.

Hãy thử sử dụng 'git clean' để xóa chúng.

+0

Điều gì về các chất liệu môi trường như node_modules hoặc nhà cung cấp? –

3

Tôi nghĩ đây không phải là điều thực sự cụ thể đối với git-subtree, bạn có tình huống tương tự nếu bạn chuyển đổi giữa hai nhánh và một trong số chúng tạo ra một số tệp phụ trong gitignore và người kia sẽ không biết về họ ... Tôi muốn nói hành vi này của git là khá chính xác, bởi vì nếu tôi thêm một tập tin vào gitignore, tôi hy vọng nó sẽ hoàn toàn bỏ qua nó và sẽ không làm bất cứ điều gì với nó - bao gồm cũng không xóa nó khi bạn di chuyển đến một chi nhánh mà nó không phải là gitignored ...

Các cách có thể bạn có thể đối phó với điều này sẽ là:

  • thêm các tập tin tương tự cũng đến gitignore trong thư mục con/tiểu dự án
  • làm git sạch trước khi bạn chuyển đổi chi nhánh
  • chỉ cần bỏ qua này, sau khi tất cả, bạn có thể sẽ không làm nhiều việc trong nhánh được tạo ra bởi git subtree tách ra ngoài việc đẩy các cam kết bên ngoài ... nếu bạn muốn làm việc riêng với tiểu dự án, thì có thể chỉ cần kiểm tra chính tiểu dự án trong thư mục bên ngoài chính.
0

Tệp .gitignore của bạn không đúng cách trộn gitignore cú pháp với cú pháp gitattributes.

Tệp .gitignore chỉ nên có mẫu. Các công cụ như số

*.py diff=python 
*.eps binary 

nằm trong tệp .gitattributes thay thế.