Solusi 3
Ini untuk menggunakan direktori tunggal untuk banyak proyek. Saya menggunakan teknik ini untuk beberapa proyek yang berhubungan erat di mana saya sering perlu menarik perubahan dari satu proyek ke proyek lainnya. Ini mirip dengan ide cabang yatim tetapi cabang tidak perlu menjadi yatim. Cukup mulai semua proyek dari keadaan direktori kosong yang sama.
Mulai semua proyek dari satu direktori kosong yang dikomit
Jangan berharap keajaiban dari solusi ini. Seperti yang saya lihat, Anda akan selalu mengalami gangguan dengan file yang tidak terlacak. Git tidak benar-benar tahu apa yang harus dilakukan dengan mereka dan jadi jika ada file perantara yang dihasilkan oleh kompiler dan diabaikan oleh file .gitignore Anda, kemungkinan mereka akan dibiarkan menggantung beberapa waktu jika Anda mencoba bertukar dengan cepat antara - misalnya - proyek perangkat lunak Anda dan proyek tesis PH.D.
Namun inilah rencananya. Mulai ketika Anda harus memulai proyek git apa pun, dengan melakukan repositori kosong, dan kemudian mulai semua proyek Anda dari keadaan direktori kosong yang sama. Dengan begitu Anda yakin bahwa dua banyak file cukup independen. Juga, berikan cabang Anda nama yang tepat dan jangan malas hanya menggunakan "master". Proyek Anda harus terpisah sehingga beri mereka nama yang sesuai.
Git melakukan (dan karenanya tag dan cabang) pada dasarnya menyimpan keadaan direktori dan subdirektori dan Git tidak tahu apakah ini adalah bagian dari proyek yang sama atau berbeda sehingga benar-benar tidak ada masalah bagi git menyimpan proyek yang berbeda dalam repositori yang sama. Masalahnya kemudian adalah Anda menghapus file yang tidak terlacak dari satu proyek saat menggunakan yang lain, atau memisahkan proyek nanti.
Buat repositori kosong
cd some_empty_directory
git init
touch .gitignore
git add .gitignore
git commit -m empty
git tag EMPTY
Mulai proyek Anda dari kosong.
Kerjakan satu proyek.
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"
Mulai proyek lain
kapanpun kamu suka.
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"
Beralih bolak-balik
Kembali dan maju antar proyek kapan pun Anda suka. Contoh ini kembali ke proyek perangkat lunak catur.
git checkout software
echo "while not end_of_game do make_move()" >> chess.prog
git add chess.prog
git commit -m "improved chess program"
File yang tidak dilacak menjengkelkan
Namun Anda akan terganggu oleh file yang tidak terlacak saat bertukar antar proyek / cabang.
touch untracked_software_file.prog
git checkout thesis
ls
philosophy_doctorate.txt untracked_software_file.prog
Ini bukan masalah yang tidak dapat diatasi
Diurutkan berdasarkan definisi, git tidak benar-benar tahu apa yang harus dilakukan dengan file yang tidak terlacak dan terserah Anda untuk mengatasinya. Anda dapat menghentikan file yang tidak dilacak untuk dibawa-bawa dari satu cabang ke cabang lainnya sebagai berikut.
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
Dengan memastikan bahwa direktori itu kosong sebelum memeriksa proyek baru kami, kami memastikan tidak ada menggantung file yang tidak terlacak dari proyek lain.
Penyempurnaan
$ GIT_AUTHOR_DATE='2001-01-01:T01:01:01' GIT_COMMITTER_DATE='2001-01-01T01:01:01' git commit -m empty
Jika tanggal yang sama ditentukan setiap kali melakukan repositori kosong, maka komit kosong yang dibuat secara independen dapat memiliki kode SHA1 yang sama. Ini memungkinkan dua repositori untuk dibuat secara independen dan kemudian digabung bersama menjadi satu pohon dengan akar yang sama dalam satu repositori nanti.
Contoh
# 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
Hasil

Gunakan subdirektori per proyek?
Mungkin juga membantu jika Anda menyimpan proyek Anda di subdirektori jika memungkinkan, misalnya alih-alih memiliki file
chess.prog
philosophy_doctorate.txt
memiliki
chess/chess.prog
thesis/philosophy_doctorate.txt
Dalam hal ini file perangkat lunak Anda yang tidak terlacak akan menjadi chess/untracked_software_file.prog. Ketika bekerja di thesisdirektori Anda tidak boleh diganggu oleh file program catur yang tidak terlacak, dan Anda mungkin menemukan kesempatan ketika Anda dapat bekerja dengan senang hati tanpa menghapus file yang tidak terlacak dari proyek lain.
Juga, jika Anda ingin menghapus file yang tidak terlacak dari proyek lain, itu akan lebih cepat (dan lebih rentan untuk kesalahan) untuk membuang direktori yang tidak diinginkan daripada menghapus file yang tidak diinginkan dengan memilih masing-masing.
Nama cabang dapat menyertakan karakter '/'
Jadi, Anda mungkin ingin memberi nama cabang Anda sesuatu seperti
project1/master
project1/featureABC
project2/master
project2/featureXYZ