2013-07-23 2 views
3

Справочник .git продолжает появляться в моем проекте, внутри каталога, который, как я думаю, следует игнорировать. Он появляется каждый раз, когда я очищаю проект или обновляю его в Eclipse. Дублированный каталог .git приводит к избыточным файлам, которые препятствуют созданию проекта.Как предотвратить каталоги .git от копирования в каталог bin во время восстановления?

У меня есть проект Android в Eclipse, который связывает исходный код с Java-проектом, таким образом LibGDX обрабатывает проект. Директория .git, которую я не хочу, содержит файл, который вызывает конфликт, поэтому я должен удалять его каждый раз, когда я хочу создать его на устройстве.

Он создает каталог MyProject/bin/classes/.git. Но у меня есть bin/в моем файле .gitignore. Мой репозиторий находится в MyProject.

Противоположный файл: \ bin \ classes.git \ COMMIT_EDITMSG. Это конфликтует с файлом в связанном исходном проекте Java: \ gen.git \ COMMIT_EDITMSG. Также та же проблема, потому что у меня есть \ gen в .gitignore этого проекта.

Я уверен, что Eclipse или ADT, который копирует каталог .git в каталог bin, когда он восстанавливает или очищает проект.

Итак, теперь мой вопрос: как я могу заставить Eclipse и/или ADT прекратить это делать?

(Если вы хотите увидеть мой старый .gitignore, который, по моему мнению, не имеет значения, потому что он правильно настроен, чтобы игнорировать каталог bin, вы можете щелкнуть ссылку «Отредактировано», чтобы увидеть его в истории этого сообщения.)

+0

Есть ли у вас (отдельный) репозиторий в 'src' folrder? – ozbek

+0

Можете ли вы поделиться содержимым COMMIT_EDITMSG? Это может помочь. –

ответ

2

Если то, что вы хотите, чтобы исключить * .git файл, который будет скопирован во время сборки в затмении, вы можете установить под Java Построить меню Path для конкретного проекта , а затем добавьте * .git в шаблоны исключения. Это довольно сложно здесь, потому что вы можете либо указать шаблоны включения, либо шаблоны исключения, но не оба из них. Таким образом, возможно, вы хотите попытаться исключить * .git, чтобы он не копировал во время сборки.

См скриншот ниже, например:

enter image description here

+0

Это решило мою проблему, когда я сделал это из связанной исходной папки. Спасибо! Я страдаю этой проблемой в течение года! – Tenfour04

0

Добавление файла .gitignore не удаляет его, если он уже в дереве:

$ git init 
Initialized empty Git repository in <path>/.git 
$ mkdir gen; echo created > gen/file 
$ git add gen; git commit -m initial 
[master (root-commit) 14c2756] initial 
1 file changed, 1 insertion(+) 
create mode 100644 gen/file 
$ echo gen > .gitignore; git add .gitignore; git commit -m 'oops, ignore gen' 
[master dc55e75] oops, ignore gen 
1 file changed, 1 insertion(+) 
create mode 100644 .gitignore 
$ rm gen/file 
$ git reset --hard HEAD 
HEAD is now at dc55e75 oops, ignore gen 
$ cat gen/file 
created 
$ git ls-files 
.gitignore 
gen/file 

Итак, как это исправить?

$ git rm gen/file; git commit -m 'remove gen that we ignore' 
rm 'gen/file' 
[master 97de6f9] remove gen that we ignore 
1 file changed, 1 deletion(-) 
delete mode 100644 gen/file 
$ mkdir gen ; echo created > gen/file 
$ git status 
# On branch master 
nothing to commit, working directory clean 

В основном вы должны совершить изменения, которые удаляет чтобы быть игнорируемые файлы, так что они не в дереве. После этого комбинация .gitignore и отсутствие файлов в дереве зададут вам то, что вам нужно в первую очередь.

+0

Я не думаю, что это моя конкретная проблема. Этот каталог bin/уже был в моем .gitignore, прежде чем я создал репозиторий. Кроме того, я удалил репозиторий на верхнем уровне проекта, удалив там каталог .git. Но когда я очищаю проект в Eclipse, каталог .git в bin/reappears! – Tenfour04

+0

Это может быть что-то другое. Вы используете подмодули? – torek

+0

Я не знаю, что это такое, поэтому я так не думаю. – Tenfour04

1

Вы используете подмодули? - Торек 23 июля '13 в 20:27

Я не знаю, что это такое, так что я не думаю, что так

Вы должны проверить его в любом случае, перейдя к папке из этого каталога .git, и делает git ls-files, ища special entry (a gitlink) mode 160000.

cd MyProject 
git ls-tree HEAD bin 
160000 commit c0f065504bb0e8cfa2b107e975bb9dc5a34b0398 bin 

jthill Как говорит in the comments:

git ls-files -s|grep ^16 

Смотрите также, если у вас есть MyProject/.gitmodules файл.

Если это так:

git submodule deinit bin 
git rm bin 
git commit -m "remove bin submodule" 
git push 
+0

s/can/should /. Я сам 'git ls-files -s | grep^16'. +1, также [этот флажок для клонов-подмодулей] (http://wiki.eclipse.org/EGit/User_Guide#Working_with_Submodules) выглядит хорошо. – jthill

+0

@ я согласен и отредактировал ответ соответственно. – VonC

2

Вам нужно отредактировать файл .classpath для вашего проекта и добавить шаблоны игнорировать эти каталоги.

Посмотрите на линии:

<classpathentry kind="src" path="src"/> 
<classpathentry kind="src" path="gen"/> 

и изменить их в:

<classpathentry excluding="**/.git/**" kind="src" path="src"/> 
<classpathentry excluding="**/.git/**" kind="src" path="gen"/> 

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

Взгляните на Inclusion and Exclusion Patterns в документации Eclipse.

+0

Спасибо, это было похоже на принятый ответ, но другой ответ был ранее и немного проще реализовать. И я связывал источник проекта, который также связывал источник, который сделал этот дроссель, когда я добавил путь «gen». – Tenfour04

Смежные вопросы