Çözüm 3
Bu, birden çok proje için tek bir dizin kullanmak içindir. Bu tekniği sık sık bir projeden diğerine değişiklikleri çekmem gereken bazı ilgili projeler için kullanıyorum. Artık öksüz dallar fikrine benzer, ancak dalların yetim kalmasına gerek yoktur. Tüm projeleri aynı boş dizin durumundan başlatın.
Tüm projeleri tek bir boş dizinden başlat
Bu çözümden harikalar beklemeyin. Gördüğüm gibi, her zaman izlenmeyen dosyalarla ilgili sıkıntılar yaşayacaksınız. Git'in onlarla ne yapacağına dair bir ipucu yok ve bu nedenle bir derleyici tarafından oluşturulan ve .gitignore dosyanız tarafından göz ardı edilen ara dosyalar varsa, hızlı bir şekilde değiştirmeyi denerseniz muhtemelen bir süre asılı kalacaklar - örneğin, yazılım projeniz ve bir doktora tez projesi arasında.
Ancak plan burada. Boş depoyu taahhüt ederek git projelerini başlatmanız gerektiği gibi başlayın ve ardından tüm projelerinizi aynı boş dizin durumundan başlatın. Bu şekilde, iki dosyanın çok bağımsız olduğundan emin olabilirsiniz. Ayrıca, dallarınıza uygun bir ad verin ve tembel olarak sadece "usta" kullanmayın. Projeleriniz ayrı olmalı, bu yüzden onlara uygun isimler verin.
Git taahhüt eder (ve böylece etiketler ve şubeler) temel olarak bir dizinin ve alt dizinlerinin durumunu saklar ve Git bunların aynı ya da farklı projelerin parçaları olup olmadığı hakkında hiçbir fikre sahip değildir, bu yüzden gerçekten de aynı projede farklı projeleri depolamak için sorun yoktur. Bu durumda sorun, başka bir projeyi kullanırken izlenmeyen dosyaları bir projeden temizlemeniz veya projeleri daha sonra ayırmanızdır.
Boş bir havuz oluşturun
cd some_empty_directory
git init
touch .gitignore
git add .gitignore
git commit -m empty
git tag EMPTY
Projelerinizi boştan başlatın.
Bir proje üzerinde çalışı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"
Başka bir proje başlat
ne zaman istersen.
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"
İleri ve geri geçiş
İstediğiniz zaman projeler arasında ileri ve geri gidin. Bu örnek satranç yazılım projesine dayanmaktadır.
git checkout software
echo "while not end_of_game do make_move()" >> chess.prog
git add chess.prog
git commit -m "improved chess program"
İzlenmeyen dosyalar sinir bozucu
Bununla birlikte, projeler / şubeler arasında geçiş yaparken izlenmeyen dosyalar sizi rahatsız edecektir.
touch untracked_software_file.prog
git checkout thesis
ls
philosophy_doctorate.txt untracked_software_file.prog
Bu aşılmaz bir sorun değil
Tanıma göre, git izlenmeyen dosyalarla ne yapacağınızı gerçekten bilmiyor ve onlarla başa çıkmak size kalmış. İzlenmeyen dosyaların bir şubeden diğerine taşınmasını aşağıdaki gibi durdurabilirsiniz.
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
Yeni projemize bakmadan önce dizinin boş olduğundan emin olarak başka bir projeden izlenmeyen dosya kalmadığından emin olduk.
Ayrıntılandırma
$ GIT_AUTHOR_DATE='2001-01-01:T01:01:01' GIT_COMMITTER_DATE='2001-01-01T01:01:01' git commit -m empty
Boş bir depo gerçekleştirirken aynı tarihler belirtilirse, bağımsız olarak oluşturulan boş depo taahhütleri aynı SHA1 koduna sahip olabilir. Bu, iki havuzun bağımsız olarak oluşturulmasına ve daha sonra bir havuzda ortak bir kökle tek bir ağaçta birleştirilmesine izin verir.
Misal
# 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
Sonuç

Proje başına alt dizinler kullanılsın mı?
Ayrıca, projelerinizi mümkün olduğunca alt dizinlerde tutmanız, örneğin dosyalara sahip olmak yerine,
chess.prog
philosophy_doctorate.txt
Sahip olmak
chess/chess.prog
thesis/philosophy_doctorate.txt
Bu durumda izlenmeyen yazılım dosyanız olacaktır chess/untracked_software_file.prog. Dizinde çalışırken thesisizsiz satranç program dosyaları tarafından rahatsız edilmemelisiniz ve diğer projelerden izlenmemiş dosyaları silmeden mutlu bir şekilde çalışabileceğiniz durumlar bulabilirsiniz.
Ayrıca, izlenmeyen dosyaları diğer projelerden kaldırmak istiyorsanız, istenmeyen bir dizini boşaltmak, her birini seçerek kaldırmaktan daha hızlı (ve hataya daha az eğilimli) olacaktır.
Şube adları '/' karakterleri içerebilir
Bu yüzden dallarınıza şöyle bir isim vermek isteyebilirsiniz:
project1/master
project1/featureABC
project2/master
project2/featureXYZ