Статья последний раз была обновлена 04.03.2023
.gitignore файл в Sourcetree не работает
голосов
Я работаю над проектом maven, и я хочу игнорировать файлы, сгенерированные и хранящиеся в/целевой папке моей корневой папки проекта (Evaluation). В корневом каталоге моего репозитория git у меня есть файл .gitignore со следующими записями (backend — это просто папка, содержащая проект Eclipse Evaluation)
backend/Evaluation/logs/
backend/Evaluation/target/
По какой-то причине SourceTree не игнорирует файлы, хранящиеся в этих двух папках, и когда я компилирую мой проект, есть некоторые незафиксированные изменения, которые являются некоторыми .class файлами внутри/целевой папки.
Почему это происходит? Я также попытался изменить записи .gitignore на
/бэкенд/Оценка/журналы/**
но это тоже не сработало.
Любые идеи?
6 ответов
голосов
Скажем, у нас есть файл, который был непреднамеренно добавлен в наш репозиторий:
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
голосов
Поскольку в вопросе есть тег Sourcetree, я отвечу вам , как это сделать с Sourcetree, это действительно просто.
Как уже говорилось, сначала нужно удалить файл из отслеживания, а затем заставить Sourcetree игнорировать файл.
- Измените что-нибудь в файле так, чтобы оно было показано вам, или выберите его на вкладке «статус файла» внизу открытого репозитория.
- Щелкните правой кнопкой мыши по файлу, и вы увидите «Игнорировать…», но он неактивен, потому что, как сказано выше, он уже находится в треке.
- Щелкните правой кнопкой мыши файл и выберите «Остановить отслеживание»
- Файл будет отображаться красной кнопкой, которая указывает, что он будет удален (от отслеживания).
- Новая запись того же файла будет отображаться в «статусе файла» с голубым вопросительным знаком, указывающим новый файл (новый, потому что вы сказали удалить из отслеживания в 4)
- Щелкните правой кнопкой мыши на файле с 5 и теперь вы видите, что «Игнорировать…» может выбрать. Нажмите на него, и Sourcetree поместит новую запись для файла в файл .gitignore
- Вы можете увидеть файл .gitignore, если вы нажмете «Настройка» в верхнем правом углу, выберите «расширенный», а затем первая запись о файле игнорирования, нажмите «изменить» и он будет открыт.
голосов
Если файлы уже добавлены или зафиксированы в вашем репозитории Git, вы должны сначала остановить их отслеживание, прежде чем они будут проигнорированы .gitIgnore.
Чтобы остановить отслеживание файлов в SourceTree:
Щелкните правой кнопкой мыши файлы. Выберите «Остановить отслеживание».
(это не удалит ваши файлы, а просто перестанет отслеживать их)
Чтобы остановить отслеживание файлов из командной строки:
git rm --cached example.txt
голосов
У меня возникла проблема с отслеживанием папки bin (целая папка).
Итак, вот быстрые шаги (более визуальные, так как я скорее визуальный тип человека):
- Только для целей безопасности я застегнул всю папку bin
- Переместить его на рабочий стол
- Переместить (текущий) .gitignore на рабочий стол, а также
- Удалить всю папку BIN
- Заблокировать изменения (с помощью любимого инструмента git commit)
- Commit, push, done!
- Вернитесь в базовую папку проекта
- Верните файл .gitignore
- Дополнительно — отмените (распакуйте) папку с бункером.
- В результате вы увидите, что инструмент git больше не отслеживает изменения из папки bin.
Я надеюсь, что это поможет кому-то.
голосов
В дополнение к уже указанным выше ответам также обратите внимание, что файл .gitignore
не будет работать, если он не находится в корневой папке.
У меня был проект, где .gitignore
был здесь /projectname/.gitignore
и поэтому не читался. Поэтому я переместил его на /.gitignore
, и все было хорошо снова.
голосов
Я обнаружил, что, удалив репозиторий, затем, имея файл .gitignore в папке, когда репозиторий воссоздан, файл игнорирования соблюдается.
http://qaru.site/questions/96219/gitignore-file-in-sourcetree-not-working
Кандидат технических наук, доцент кафедры ИУ-6 (Компьютерные системы и сети) Московского государственного технического университета им. Н. Э. Баумана. Самый молодой в России PhD in Computer Science. Эксперт в области компьютерных технологий и программирования.
Стаж: 8 лет.
Образование: МГТУ им. Н. Э. Баумана, к.т.н.
- Как узнать IP-адрес по MAC-адресу - 07.04.2023
- Пинг проходит, а страницы в браузере не открываются - 07.04.2023
- Что если сайт пингуется «извне», но не открывается из под «локалки»? - 07.04.2023