Какова наилучшая практика для размещения нескольких проектов в репозитории git?



по какой-то причине у меня есть только один репозиторий для использования. Но у меня есть несколько проектов, включая java-проекты, PHP-скрипты и приложения для android.
Теперь мои проблемы в том, что я должен поместить их в разные подпапки для каждого проекта; а для проектов php и проектов java я использую разные IDE. Вы знаете, каждая среда IDE может иметь собственное рабочее пространство.



кто может сказать мне, лучший способ решить проблему?

396   3  
git

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

результат

Diagram of merged repositories

использовать подкаталоги для каждого проекта?

это также может помочь, если вы держите свои проекты в подкаталогах, где это возможно, например, вместо файлов

chess.prog
philosophy_doctorate.txt 

есть

chess/chess.prog
thesis/philosophy_doctorate.txt 

In в этом случае ваш файл untracked software будет chess/untracked_software_file.prog. При работе в thesis каталог вас не должны беспокоить файлы программы untracked chess, и вы можете найти случаи, когда вы можете работать счастливо, не удаляя файлы untracked из других проектов.

кроме того, если вы хотите удалить неотслеженные файлы из других проектов, это будет быстрее (и менее склонны к ошибкам), чтобы сбросить ненужный каталог, чем удалить ненужные файлы, выбрав каждый из них.

Я хотел бы использовать git submodules.

посмотреть здесь репозиторий Git в репозитории git

Comments

    Ничего не найдено.