.gitignore файл в Sourcetree не работает
Я работаю над проектом maven, и я хочу игнорировать файлы, сгенерированные и хранящиеся в/целевой папке моей корневой папки проекта (Evaluation). В корневом каталоге моего репозитория git у меня есть файл .gitignore со следующими записями (backend - это просто папка, содержащая проект Eclipse Evaluation)
backend/Evaluation/logs/
backend/Evaluation/target/
По какой-то причине SourceTree не игнорирует файлы, хранящиеся в этих двух папках, и когда я компилирую мой проект, есть некоторые незафиксированные изменения, которые являются некоторыми .class файлами внутри/целевой папки.
Почему это происходит? Я также попытался изменить записи .gitignore на
/бэкенд/Оценка/журналы/**
но это тоже не сработало.
Любые идеи?
Ответы
Ответ 1
Скажем, у нас есть файл, который был непреднамеренно добавлен в наш репозиторий:
stackoverflow$ echo this file is important > junkfile
stackoverflow$ git add junkfile
stackoverflow$ git ci -m 'added a file'
В какой-то момент мы понимаем, что файл неважен, поэтому мы добавляем его в наш .gitignore
файл:
stackoverflow$ echo junkfile >> .gitignore
stackoverflow$ git ci -m 'ignore junkfile' .gitignore
Позже мы внесем некоторые изменения в этот файл:
stackoverflow$ sed -i 's/ is / is not/' junkfile
И, конечно, хотя файл указан в .gitignore
, мы уже сказали git, что мы хотим его отслеживать, поэтому git status
показывает:
stackoverflow$ git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: junkfile
#
no changes added to commit (use "git add" and/or "git commit -a")
Нам нужно удалить этот файл из репозитория (без удаления файла из нашего дерева работ). Мы можем сделать это с флагом --cached
до git rm
:
stackoverflow$ git rm --cached junkfile
rm 'junkfile'
Это этап операции delete
...
stackoverflow$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# deleted: junkfile
#
... поэтому нам нужно зафиксировать его:
stackoverflow$ git commit -m 'removed junkfile from repository'
[master 19f082a] removed junkfile from repository
1 file changed, 1 deletion(-)
delete mode 100644 junkfile
Теперь, если мы запустим git status
git, этот файл проигнорирует:
stackoverflow$ git status
# On branch master
nothing to commit, working directory clean
Несмотря на то, что он все еще присутствует в нашем рабочем дереве:
stackoverflow$ cat junkfile
this file is not important
Ответ 2
Поскольку в вопросе есть тег Sourcetree, я отвечу вам , как это сделать с Sourcetree, это действительно просто.
Как уже говорилось, сначала нужно удалить файл из отслеживания, а затем заставить Sourcetree игнорировать файл.
- Измените что-нибудь в файле так, чтобы оно было показано вам, или выберите его на вкладке "статус файла" внизу открытого репозитория.
- Щелкните правой кнопкой мыши по файлу, и вы увидите "Игнорировать...", но он неактивен, потому что, как сказано выше, он уже находится в треке.
- Щелкните правой кнопкой мыши файл и выберите "Остановить отслеживание"
- Файл будет отображаться красной кнопкой, которая указывает, что он будет удален (от отслеживания).
- Новая запись того же файла будет отображаться в "статусе файла" с голубым вопросительным знаком, указывающим новый файл (новый, потому что вы сказали удалить из отслеживания в 4)
- Щелкните правой кнопкой мыши на файле с 5 и теперь вы видите, что "Игнорировать..." может выбрать. Нажмите на него, и Sourcetree поместит новую запись для файла в файл .gitignore
- Вы можете увидеть файл .gitignore, если вы нажмете "Настройка" в верхнем правом углу, выберите "расширенный", а затем первая запись о файле игнорирования, нажмите "изменить" и он будет открыт.
Ответ 3
У меня возникла проблема с отслеживанием папки bin (целая папка).
Итак, вот быстрые шаги (более визуальные, так как я скорее визуальный тип человека):
- Только для целей безопасности я застегнул всю папку bin
- Переместить его на рабочий стол
- Переместить (текущий) .gitignore на рабочий стол, а также
- Удалить всю папку BIN
- Заблокировать изменения (с помощью любимого инструмента git commit)
- Commit, push, done!
- Вернитесь в базовую папку проекта
- Верните файл .gitignore
- Дополнительно - отмените (распакуйте) папку с бункером.
- В результате вы увидите, что инструмент git больше не отслеживает изменения из папки bin.
Я надеюсь, что это поможет кому-то.
Ответ 4
Если файлы уже добавлены или зафиксированы в вашем репозитории Git, вы должны сначала остановить их отслеживание, прежде чем они будут проигнорированы .gitIgnore.
Чтобы остановить отслеживание файлов в SourceTree:
Щелкните правой кнопкой мыши файлы. Выберите "Остановить отслеживание".
(это не удалит ваши файлы, а просто перестанет отслеживать их)
Чтобы остановить отслеживание файлов из командной строки:
git rm --cached example.txt
Ответ 5
В дополнение к уже указанным выше ответам также обратите внимание, что файл .gitignore
не будет работать, если он не находится в корневой папке.
У меня был проект, где .gitignore
был здесь /projectname/.gitignore
и поэтому не читался. Поэтому я переместил его на /.gitignore
, и все было хорошо снова.
Ответ 6
Я обнаружил, что, удалив репозиторий, затем, имея файл .gitignore в папке, когда репозиторий воссоздан, файл игнорирования соблюдается.
Ответ 7
Это сработало для меня:
git update-index --assume-unchanged some.file
Ответ 8
В течение нескольких часов боролся с этим, пробовал несколько вещей, в том числе и предложения здесь - безрезультатно... что в итоге мне помогло - создать файл .gitignore при настройке репозитория в bitbucket.org, вытащил этот файл в мой локальный, вставил то же самое содержимое файла, который я пытался создать самостоятельно, и теперь все наконец работает.