Лучше ли хранить репозиторий Git внутри или вне рабочей области Eclipse?

Я типичный пользователь Eclipse/Subversion, начинающий переход на Git. Я изучил основные концепции git и решил изначально придерживаться подхода «один проект на репозиторий», чтобы все было просто. Однако у меня все еще возникают проблемы с решением, где разместить репозиторий для каждого проекта.

Я потратил много времени на просмотр ответов на этот вопрос, хотя я считаю, что автор этого вопроса предполагалось, что вы можете использовать Eclipse для управления репозиторием только в том случае, если репозиторий находится в рабочей области Eclipse, что, конечно же, неверно.

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

Однако на практике может оказаться, что существует ряд подходов, реализованных Eclipse/EGit, некоторые из которых противоречат рекомендациям EGit.

Например, если вы используете мастер создания нового проекта для создания нового проекта PHP из Git, а репозиторий удален, Eclipse/EGit с радостью создаст папку проекта в рабочей области Eclipse и поместит репозиторий (.git) в папку проекта. Это конечный результат, который мне действительно нужен, поскольку он сохраняет все инкапсулированное в рабочей области Eclipse.

Однако если вы используете мастер создания новых проектов и выбираете локальный репозиторий Git, Eclipse/EGit не клонирует репозиторий, как это делается для удаленных репозиториев. Вместо этого он использует рабочую копию этого репозитория в качестве местоположения проекта, создает свой .project и другие метаматериалы в этом местоположении, а также создает новую (на первый взгляд ненужную) папку в этой рабочей копии с тем же именем, что и ваш проект (так что вы заканчиваете вверх, например, ~/git/blah/blah). Если вы удалите эту лишнюю папку, вы получите структуру, идентичную первому примеру, с той лишь разницей, что папка проекта не является подпапкой вашей папки рабочей области Eclipse, она находится где-то еще в вашей файловой системе (например, ~/git/blah). Единственная положительная сторона этого подхода, похоже, заключается в том, что он придерживается рекомендаций в руководстве пользователя EGit, но с технической точки зрения трудно понять, чем он действительно отличается от первого примера.

Учитывая эти загадочные наблюдения, мне интересно, какой опыт люди получили, используя каждый из этих подходов, и какие подводные камни могут быть, если игнорировать рекомендации в руководстве пользователя EGit.


person JamesG    schedule 10.05.2012    source источник
comment
возможный дубликат Должен ли я хранить репозиторий git в Home или Eclipse Рабочее пространство?   -  person mallardz    schedule 19.06.2014
comment
@JamesG Какой подход вы используете, чтобы отразить изменения в рабочей области в вашем каталоге git? Есть ли лучшая альтернатива копированию исходного кода?   -  person Sudip Bhandari    schedule 14.11.2016
comment
Я больше не использую Eclipse — я использую PHPStorm — поэтому я просто клонирую в папку проекта и затем начинаю работать там. Я не думаю, что PHPStorm даже предоставляет возможность хранить репозиторий в другой папке проекта. Честно говоря, основываясь на том, что я слышал и читал после публикации этого вопроса четыре года назад, я не думаю, что многие люди будут хранить свои репозитории вне папок своих проектов.   -  person JamesG    schedule 15.11.2016


Ответы (2)


Последствия обоих решений перечислены непосредственно в руководстве пользователя, на которое вы ссылаетесь. Я могу сказать вам, что часть

Это может привести к проблемам с производительностью

к сожалению очень верно. Поэтому, если у вас есть каталог git с огромным количеством файлов внутри вашего рабочего пространства, многие операции git будут начинаться с диалогового окна "подсчет объектов...", которое блокирует вашу IDE, поскольку она сканирует все файлы в рабочем пространстве. Для моих текущих 20000 файлов это означает ожидание от 10 до 20 секунд для каждой фиксации, каждого переключения,...

В свободное время, когда я, к счастью, могу использовать другую альтернативу (наличие рабочего каталога git за пределами рабочей области), все кажется намного быстрее, и слияние и переключение доставляет удовольствие.

Поэтому, если вы работаете над большими проектами, рассмотрите каталог git за пределами рабочей области в качестве первого выбора.

person Bananeweizen    schedule 10.05.2012
comment
Я добавлю, что Eclipse и EGit сами настроили себя на использование своих репозиториев git за пределами своего рабочего пространства, и все работает нормально. - person Paul Webster; 10.05.2012
comment
@Bananeweizen Вы упомянули, что экспериментировали с рабочим каталогом git за пределами рабочей области, и все было быстрее. Был ли один из этих экспериментов проведен с вашим большим (20 000 файлов) проектом или небольшими проектами-песочницами? То есть можете ли вы однозначно сказать, что вне рабочей области проект из 20 000 файлов работал гораздо более плавно? - person JamesG; 11.05.2012
comment
@Bananeweizen Вы просто копируете все в другой каталог, а затем копируете обратно в репозиторий, прежде чем выполнять git add? - person Dan Chase; 21.02.2017
comment
@DanChase Просто клонируйте репозиторий, а затем используйте мастер импорта непосредственно из представления репозитория git. Под капотом это создаст запись в метаданных рабочей области, но оставит все файлы в исходном месте. Вы можете проверить, открыв свойства таких импортированных проектов и их файлов, они все еще находятся в репозитории git, а не в каталоге рабочей области. - person Bananeweizen; 21.02.2017
comment
Этот ответ и часть Руководства, из которой находится выдержка, сбивают с толку. В параграфе руководства говорится, что рекомендуется хранить репозиторий вне рабочей области Eclipse, т. е. не размещать репозиторий в рабочей области eclipse, и в качестве причины описывает производительность проблема, которую легко избежать с помощью фильтров ресурсов Eclipse — они заставляют Eclipse полностью игнорировать папки .git, даже когда рабочая область постоянно обновляется. Чего определенно не следует делать, так это обратного, помещать всю рабочую область eclipse (с папкой .metadata) под контроль git. - person haelix; 06.09.2018

Я делаю ту же миграцию, что и исходный постер, и нашел еще одну ветку, в которой те же сомнения выражаются в рекомендации Egit: Должен ли я хранить репозиторий git в домашней или рабочей области Eclipse?

@JamesG Так это твой макет?

~/projectA/workspace/.metadata
~/projectA/workspace/subproj1/.project
~/projectA/workspace/subproj2/.project
~/projectA/subproj1/.git
~/projectA/subproj1/file1
~/projectA/subproj2/.git
~/projectA/subproj1/file2
person Michel    schedule 22.11.2012
comment
Спасибо за ссылку на этот пост. Это сделало большое различие между наличием нескольких проектов в одном репозитории git и одним проектом в репозитории. Если выбрать первое, то я согласен с тем, что размещение репозитория в рабочей области не имеет смысла, потому что тогда каталог .git находится на том же уровне, что и проекты, что мне просто кажется неправильным. В моем случае я могу позволить себе роскошь определять структуру репозитория, поэтому я выбрал один репозиторий для каждого проекта, поэтому каждый проект Eclipse является клоном репозитория. Этот подход хорошо работает для меня, даже для более крупных проектов (например, ZF2). - person JamesG; 28.11.2012