Добавить все файлы в фиксацию, кроме одного файла?
у меня есть куча файлов в наборе, но я хочу специально пропустить один измененный файл. Выглядит так после git status:
# modified: main/dontcheckmein.txt
# deleted: main/plzcheckmein.c
# deleted: main/plzcheckmein2.c
...
есть ли способ я могу сделать git add но просто игнорировать один текстовый файл, я не хочу трогать? Что-то вроде:
git add -u -except main/dontcheckmein.txt
9 ответов:
1) чтобы начать игнорировать изменения в одном уже версионном файле
git update-index --assume-unchanged "main/dontcheckmein.txt"и отменить, что
git update-index --no-assume-unchanged "main/dontcheckmein.txt"2) полностью игнорировать конкретный отдельный файл, предотвращая его создание в репозитории
первый взгляд на этот git global ignore не работает
и
.gitignoreдобавить относительный путь к файлу без ведущий./так что если ваш файл находится на
MyProject/MyFolder/myfile.txt(где.gitтакже наMyProject), at.gitignoreвы ставите только этотMyFolder/myfile.txtвы можете подтвердить, какое правило связано с игнорированием с
git check-ignore "MyFolder/myfile.txt"о глобальном игноре
эта ссылка говорит о
~/.gitignore_global; но файл связан с вашим проектом; поэтому, если вы поместите шаблон excludeMyFolder/myfile.txtat~/.gitignore_global, это будет работать, но не имеет особого смысла...С другой стороны, если вы настроите ваш проект с
git config core.excludesfile .gitignoreздесь.gitignoreнаMyProject; что программа установки будет переопределить~/.gitignore_globalчто может быть очень полезных правил...так что, на данный момент, я думаю, что лучше всего сделать какой-то сценарий, чтобы смешать ваш
.gitignoreС~/.gitignore_globalat.gitignore.последнее предупреждение
Если файл, который вы хотите игнорировать, уже находится в репозитории, этот метод не будет работать, если вы этого не сделаете:git rm "MyFolder/myfile.txt", но сначала создайте резервную копию, так как она также будет удалена локально! вы можете скопировать его позже...
в то время как Бен Джексон прав, я думал, что добавлю, как я использую это решение, а также. Ниже приведен очень простой скрипт, который я использую (который я называю gitadd), чтобы добавить все изменения, кроме нескольких избранных, которые я храню в файле с именем
.gittrackignore(очень похоже на то, как .gitignore works).#!/bin/bash set -e git add -A git reset `cat .gittrackignore`и это то, что мой нынешний
.gittrackignoreвыглядит.project.propertiesЯ работаю на Android-проект, который я компилирую из командной строки при развертывании. Этот проект зависит на SherlockActionBar, поэтому на него нужно ссылаться в проекте.свойства, но это портит компиляцию, поэтому теперь я просто набираю
gitaddи добавить все изменения в git без необходимости отмены добавления проекта.свойства каждый раз.
теперь
gitподдерживаетexclude certain paths and filesпо pathspec magic:(exclude)и его краткая форма:!. Таким образом, вы можете легко достичь этого, как следующая команда.git add --all -- :!main/dontcheckmein.txtна самом деле вы можете указать больше:
git add --all -- :!path/to/file1 :!path/to/file2 :!path/to/folder1/*
использовать
git add -Aдобавить все измененные и новые файлы сразу.пример
git add -A git reset -- main/dontcheckmein.txt
Я использую
git add --patchсовсем немного и хотел что-то подобное, чтобы избежать попадания d все время через одни и те же файлы. Я взбил очень хаки пару git псевдонимы, чтобы получить работу:[alias] HELPER-CHANGED-FILTERED = "!f() { git status --porcelain | cut -c4- | ( [[ \"\" ]] && egrep -v \"\" || cat ); }; f" ap = "!git add --patch -- $(git HELPER-CHANGED-FILTERED 'min.(js|css)$' || echo 'THIS_FILE_PROBABLY_DOESNT_EXIST' )"в моем случае я просто хотел игнорировать определенные мини-файлы все время, но вы можете использовать переменную окружения, такую как
$GIT_EXCLUDE_PATTERNдля более общего варианта использования.
для конкретного случая в вопросе, самый простой способ было бы добавить все файлы с .c и
Serviceгде-то в их именем.очевидно, что вы не ограничены одним шаблоном для каждой команды. То есть, вы можете попросить git добавить все файлы, которые имеют расширение .c и .h:
git add *.c *.hэтой ссылке может дать вам еще несколько идей шаблона глобуса.
Я нахожу это особенно полезным, когда я делаю много изменений, но все же хочу, чтобы мои коммиты оставались атомарными и отражали постепенный процесс, а не мешанину изменений, которые я могу работать в то время. Конечно, в какой-то момент стоимость разработки сложных шаблонов перевешивает стоимость добавления файлов с помощью более простых методов или даже одного файла за раз. Тем не менее, большую часть времени я легко могу определить только файлы, которые мне нужны, с помощью простого шаблона и исключить все остальное.
кстати,мая нужно процитировать ваши шаблоны glob для их работы, но это никогда не было так для меня.