Какова наилучшая практика для размещения нескольких проектов в репозитории git?
по какой-то причине у меня есть только один репозиторий для использования. Но у меня есть несколько проектов, включая java-проекты, PHP-скрипты и приложения для android.
Теперь мои проблемы в том, что я должен поместить их в разные подпапки для каждого проекта; а для проектов php и проектов java я использую разные IDE. Вы знаете, каждая среда IDE может иметь собственное рабочее пространство.
кто может сказать мне, лучший способ решить проблему?
3 ответов:
хотя большинство людей скажут вам просто использовать несколько репозиториев, я чувствую, что стоит упомянуть, что есть и другие решения.
Решение 1
один репозиторий может содержать несколько независимая ветви, называется ветки сирота. Сиротские ветви полностью отделены друг от друга; они не имеют общих историй.
git checkout --orphan BRANCHNAMEЭто создает новую ветвь, не связанную с вашей текущей веткой. Каждый проект должен быть в свой собственный осиротевший филиал.
Теперь по какой-то причине git нуждается в небольшой очистке после сиротской проверки.
rm .git/index rm -r *убедитесь, что все зафиксировано перед удалением
как только сиротская ветвь чиста, вы можете использовать ее нормально.
решение 2
избегайте всех хлопот сиротских филиалов. Создайте два независимых репозитория и переместите их на один и тот же удаленный сервер. Просто используйте разные названия ветвей для каждого РЕПО.
# repo 1 git push origin master:master-1 # repo 2 git push origin master:master-2
решение 3
это для использования одного каталога для нескольких проектов. Я использую эту технику для некоторых тесно связанных проектов, где мне часто нужно тянуть изменения из одного проекта в другой. Это похоже на идею осиротевших ветвей, но ветви не должны быть осиротевшими. Просто запустите все проекты из одного и того же пустого состояния каталога.
запуск всех проектов из одного зафиксированного пустого каталога
не ожидайте чудес от этого решение. Как я вижу, вы всегда будете иметь неприятности с неотслеживаемый файлы. Git действительно не имеет понятия, что с ними делать, и поэтому, если есть промежуточные файлы, созданные компилятором и игнорируемые вашим .gitignore file, вполне вероятно, что они будут висеть некоторое время, если вы попытаетесь быстро переключаться между - например - вашим программным проектом и проектом диссертации PH.D.
однако вот план. Начните, как вы должны начать любые проекты git, путем фиксация пустого репозитория, а затем запустите все свои проекты из одного и того же состояния пустого каталога. Таким образом, вы уверены, что два множества файлов довольно независимы. Кроме того, дайте своим ветвям собственное имя и не лениво используйте "мастер". Ваши проекты должны быть отдельными, поэтому дайте им соответствующие имена.
git commits (и, следовательно, теги и ветви) в основном хранят состояние каталога и его подкаталогов и 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. Это позволяет создавать два репозитория независимо друг от друга, а затем объединять их в одно дерево с общим корнем в одном репозитории позже.
пример
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 git remote add chess ../chessrepository/.git git fetch chess chess:chessрезультат
использовать подкаталоги для каждого проекта?
это также может помочь, если вы держите свои проекты в подкаталогах, где это возможно, например, вместо файлов
chess.prog philosophy_doctorate.txtесть
chess/chess.prog thesis/philosophy_doctorate.txtIn в этом случае ваш файл untracked software будет
chess/untracked_software_file.prog. При работе вthesisкаталог вас не должны беспокоить файлы программы untracked chess, и вы можете найти случаи, когда вы можете работать счастливо, не удаляя файлы untracked из других проектов.кроме того, если вы хотите удалить неотслеженные файлы из других проектов, это будет быстрее (и менее склонны к ошибкам), чтобы сбросить ненужный каталог, чем удалить ненужные файлы, выбрав каждый из них.
Я хотел бы использовать
git submodules.посмотреть здесь репозиторий Git в репозитории git

Comments