Рішення 3
Це для використання єдиного каталогу для декількох проектів. Я використовую цю техніку для деяких тісно пов'язаних проектів, де мені часто потрібно перетягувати зміни з одного проекту в інший. Це схоже на ідею осиротілих гілок, але гілки не потребують осиротіння. Просто запустіть усі проекти з одного і того ж стану порожнього каталогу.
Почніть всі проекти з одного довіреного порожнього каталогу
Не чекайте чудес від цього рішення. Як я бачу, у вас завжди будуть дратуватися файли, що не відслідковуються. Git насправді не має поняття, що з ними робити, тому, якщо є проміжні файли, згенеровані компілятором і проігноровані вашим файлом .gitignore, цілком ймовірно, що вони будуть вивішені деякий час, якщо ви спробуєте швидко замінити між - наприклад, - вашим програмним проектом та проектом дисертації PH.D.
Однак ось план. Почніть так, як вам слід запустити будь-які git-проекти, зробивши порожнє сховище, а потім запустіть усі ваші проекти з того ж стану порожнього каталогу. Таким чином ви впевнені, що два файли є досить незалежними. Крім того, дайте своїм гілкам належну назву і не лінуйтеся просто використовувати "майстер". Ваші проекти повинні бути окремими, тому дайте їм відповідні назви.
Git виконує (і, отже, теги та гілки), в основному зберігає стан каталогу та його підкаталогів, і Git не має уявлення, чи це частини одного і того ж проекту чи різних проектів, тому насправді немає проблеми для зберігання git різних проектів в одному сховищі. Проблема полягає в тому, щоб ви очистили незафіксовані файли з одного проекту при використанні іншого або відокремили проекти пізніше.
Створіть порожнє сховище
cd some_empty_directory
git init
touch .gitignore
git add .gitignore
git commit -m empty
git tag EMPTY
Почніть свої проекти з порожніх.
Робота над одним проектом.
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"
Почніть ще один проект
коли завгодно.
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"
Перемикайтеся вперед і назад
Повертайтеся назад та вперед між проектами, коли завгодно. Цей приклад повертається до шахового програмного проекту.
git checkout software
echo "while not end_of_game do make_move()" >> chess.prog
git add chess.prog
git commit -m "improved chess program"
Неназвані файли дратують
Тим не менш, вас будуть дратувати файли, що не відслідковуються, при обміні між проектами / філіями
touch untracked_software_file.prog
git checkout thesis
ls
philosophy_doctorate.txt untracked_software_file.prog
Це не нездоланна проблема
Упорядкований за визначенням, git насправді не знає, що робити з незатребуваними файлами, і з ними вирішувати. Ви можете зупинити перенесення відслідковуваних файлів від однієї гілки до іншої наступним чином.
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
Переконавшись, що каталог був пустим, перш ніж перевірити наш новий проект, ми переконалися, що немає підвішених файлів, що не відслідковуються, з іншого проекту.
Вишуканість
$ GIT_AUTHOR_DATE='2001-01-01:T01:01:01' GIT_COMMITTER_DATE='2001-01-01T01:01:01' git commit -m empty
Якщо однакові дати задаються під час здійснення порожнього сховища, то незалежно створені порожні сховища репозиторію можуть мати той самий код SHA1. Це дозволяє самостійно створити два сховища, а потім об'єднати їх у одне дерево із загальним коренем у одному сховищі.
Приклад
# 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
Результат
Використовувати підкаталоги на проект?
Це також може допомогти, якщо ви зберігаєте свої проекти в підкаталогах, де це можливо, наприклад, замість того, щоб мати файли
chess.prog
philosophy_doctorate.txt
мати
chess/chess.prog
thesis/philosophy_doctorate.txt
У цьому випадку ваш файл без програмного забезпечення chess/untracked_software_file.prog
. Працюючи в thesis
каталозі, вас не повинні турбувати непотрібні файли шахових програм, і ви можете виявити випадки, коли ви можете працювати щасливо, не видаляючи непотрібні файли з інших проектів.
Крім того, якщо ви хочете видалити непотрібні файли з інших проектів, буде швидше (і менш схильне до помилок) скинути небажаний каталог, ніж видалити непотрібні файли, вибравши кожен з них.
Імена гілок можуть містити символи '/'
Тому ви можете назвати свої гілки чимось подібним
project1/master
project1/featureABC
project2/master
project2/featureXYZ