Giải pháp 3
Điều này là để sử dụng một thư mục duy nhất cho nhiều dự án. Tôi sử dụng kỹ thuật này cho một số dự án liên quan chặt chẽ, nơi tôi thường cần phải thay đổi từ dự án này sang dự án khác. Nó tương tự như ý tưởng về các nhánh mồ côi nhưng các nhánh không cần phải mồ côi. Đơn giản chỉ cần bắt đầu tất cả các dự án từ cùng một trạng thái thư mục trống.
Bắt đầu tất cả các dự án từ một thư mục trống đã cam kết
Đừng mong đợi điều kỳ diệu từ giải pháp này. Như tôi thấy, bạn sẽ luôn gặp khó chịu với các tập tin không được theo dõi. Git không thực sự biết phải làm gì với chúng và vì vậy nếu có các tệp trung gian được tạo bởi trình biên dịch và bị bỏ qua bởi tệp .gitignore của bạn, có khả năng chúng sẽ bị treo trong một thời gian nếu bạn cố gắng trao đổi nhanh giữa - ví dụ - dự án phần mềm của bạn và dự án luận án PH.D.
Tuy nhiên đây là kế hoạch. Bắt đầu như bạn nên bắt đầu bất kỳ dự án git nào, bằng cách cam kết kho lưu trữ trống, và sau đó bắt đầu tất cả các dự án của bạn từ cùng một trạng thái thư mục trống. Bằng cách đó, bạn chắc chắn rằng hai lô tệp khá độc lập. Ngoài ra, cung cấp cho các chi nhánh của bạn một tên thích hợp và đừng lười biếng chỉ sử dụng "chủ". Các dự án của bạn cần phải riêng biệt để cung cấp cho họ tên thích hợp.
Git cam kết (và do đó thẻ và chi nhánh) về cơ bản lưu trữ trạng thái của một thư mục và các thư mục con của nó và Git không biết liệu đây là các phần của cùng một dự án hay khác nhau nên thực sự không có vấn đề gì khi git lưu trữ các dự án khác nhau trong cùng một kho lưu trữ. Vấn đề là sau đó bạn phải xóa các tệp không bị theo dõi khỏi một dự án khi sử dụng dự án khác hoặc tách các dự án sau đó.
Tạo một kho lưu trữ trống
cd some_empty_directory
git init
touch .gitignore
git add .gitignore
git commit -m empty
git tag EMPTY
Bắt đầu các dự án của bạn từ trống.
Làm việc trên một dự án.
git branch software EMPTY
git checkout software
echo "array board[8,8] of piece" > chess.prog
git add chess.prog
git commit -m "chess program"
Bắt đầu một dự án khác
bất cứ khi nào bạn muốn.
git branch thesis EMPTY
git checkout thesis
echo "the meaning of meaning" > philosophy_doctorate.txt
git add philosophy_doctorate.txt
git commit -m "Ph.D"
Chuyển đổi qua lại
Quay trở lại và chuyển tiếp giữa các dự án bất cứ khi nào bạn muốn. Ví dụ này quay trở lại dự án phần mềm cờ vua.
git checkout software
echo "while not end_of_game do make_move()" >> chess.prog
git add chess.prog
git commit -m "improved chess program"
Các tập tin không bị theo dõi gây phiền nhiễu
Tuy nhiên, bạn sẽ khó chịu bởi các tệp không bị theo dõi khi hoán đổi giữa các dự án / chi nhánh.
touch untracked_software_file.prog
git checkout thesis
ls
philosophy_doctorate.txt untracked_software_file.prog
Đó không phải là một vấn đề không thể vượt qua
Theo định nghĩa, git không thực sự biết phải làm gì với các tệp không bị theo dõi và tùy thuộc vào bạn để xử lý chúng. Bạn có thể ngăn chặn các tệp không bị theo dõi khỏi được mang từ chi nhánh này sang chi nhánh khác như sau.
git checkout EMPTY
ls
untracked_software_file.prog
rm -r *
(directory is now really empty, apart from the repository stuff!)
git checkout thesis
ls
philosophy_doctorate.txt
Bằng cách đảm bảo rằng thư mục trống trước khi kiểm tra dự án mới của chúng tôi, chúng tôi đảm bảo rằng không có các tệp bị treo không bị theo dõi từ dự án khác.
Một sàng lọc
$ GIT_AUTHOR_DATE='2001-01-01:T01:01:01' GIT_COMMITTER_DATE='2001-01-01T01:01:01' git commit -m empty
Nếu cùng một ngày được chỉ định bất cứ khi nào cam kết một kho lưu trữ trống, thì các cam kết kho lưu trữ trống được tạo độc lập có thể có cùng mã SHA1. Điều này cho phép hai kho lưu trữ được tạo độc lập và sau đó được hợp nhất với nhau thành một cây duy nhất với một gốc chung trong một kho lưu trữ sau đó.
Thí dụ
# Create thesis repository.
# Merge existing chess repository branch into it
mkdir single_repo_for_thesis_and_chess
cd single_repo_for_thesis_and_chess
git init
touch .gitignore
git add .gitignore
GIT_AUTHOR_DATE='2001-01-01:T01:01:01' GIT_COMMITTER_DATE='2001-01-01:T01:01:01' git commit -m empty
git tag EMPTY
echo "the meaning of meaning" > thesis.txt
git add thesis.txt
git commit -m "Wrote my PH.D"
git branch -m master thesis
# It's as simple as this ...
git remote add chess ../chessrepository/.git
git fetch chess chess:chess
Kết quả

Sử dụng thư mục con cho mỗi dự án?
Nó cũng có thể hữu ích nếu bạn giữ các dự án của mình trong các thư mục con nếu có thể, ví dụ thay vì có các tệp
chess.prog
philosophy_doctorate.txt
có
chess/chess.prog
thesis/philosophy_doctorate.txt
Trong trường hợp này, tập tin phần mềm không bị theo dõi của bạn sẽ được chess/untracked_software_file.prog
. Khi làm việc trong thesis
thư mục, bạn không nên bị làm phiền bởi các tệp chương trình cờ không bị theo dõi và bạn có thể tìm thấy những dịp mà bạn có thể làm việc vui vẻ mà không xóa các tệp không bị theo dõi khỏi các dự án khác.
Ngoài ra, nếu bạn muốn xóa các tệp không bị theo dõi khỏi các dự án khác, sẽ nhanh hơn (và ít bị lỗi hơn) để xóa một thư mục không mong muốn hơn là xóa các tệp không mong muốn bằng cách chọn từng tệp.
Tên chi nhánh có thể bao gồm các ký tự '/'
Vì vậy, bạn có thể muốn đặt tên cho các chi nhánh của bạn như
project1/master
project1/featureABC
project2/master
project2/featureXYZ