У меня есть набор файлов в наборе изменений, но я хочу специально игнорировать один измененный файл. Выглядит так после git status
:
# modified: main/dontcheckmein.txt
# deleted: main/plzcheckmein.c
# deleted: main/plzcheckmein2.c
...
Есть ли способ, которым я могу сделать, git add
но просто игнорировать один текстовый файл, который я не хочу трогать? Что-то вроде:
git add -u -except main/dontcheckmein.txt
main/*
необходимо добавить--
перед ним, чтобы git знал, что это путь. Два других варианта работают без учета двух тире. (Проверено в командной строке на Windows 7 с msysGit)git reset
впоследствии выполнение этих папок все равно будет работать, но для добавления больших папок потребуется много времени.1) Чтобы начать игнорировать изменения в одном уже версионном файле
и отменить это
git update-index --no-assume-unchanged "main/dontcheckmein.txt"
github docs игнорировать файлы
2) Полностью игнорировать определенный отдельный файл, предотвращая его создание в хранилище.
Во-первых, посмотрите на этот стековый пост: Git global ignore не работает
В
.gitignore
, добавьте относительный путь к файлу без начала./
.Таким образом, если ваш файл находится в
MyProject/MyFolder/myfile.txt
(где.git
также находится вMyProject
папке), добавьтеMyFolder/myfile.txt
к вашему в.gitignore
файл.Вы можете подтвердить, какие правила связаны с игнорированием через
git check-ignore "MyFolder/myfile.txt"
О глобальном игнорировании
Эта ссылка говорит о
~/.gitignore_global
, но файл относится к вашему проекту. Итак, если вы поставите исключающий шаблонMyFolder/myfile.txt
в~/.gitignore_global
, он будет работать , но не имеет смысла ...С другой стороны, если вы настроите свой проект,
git config core.excludesfile .gitignore
где.gitignore
находитсяMyProject
, локальный файл будет переопределен~/.gitignore_global
, что может иметь очень полезные правила ...Таким образом, на данный момент, я думаю , что лучше , чтобы сделать некоторый сценарий микшировать
.gitignore
с~/.gitignore_global
в.gitignore
.Одно последнее предупреждение
Если файл, который вы хотите игнорировать, уже находится в хранилище, этот метод не будет работать, если вы не сделаете этого:,
git rm "MyFolder/myfile.txt"
но сначала сделайте резервную копию, так как он также будет удален локально! Вы можете скопировать его позже ...источник
git rm --cached MyFolder/myyfile.txt
для удаления файла из хранилища, но сохранить его локально. Пояснение на help.github.comДля файла
Для папки
источник
git add . && git reset -- main/*
?git push origin master
ваш следующий push, простоgit push
git будет знать, что это в мастер ветке. Надеюсь, поможет.Теперь
git
поддерживаетexclude certain paths and files
магию pathspec:(exclude)
и ее краткую форму:!
. Таким образом, вы можете легко добиться этого как следующая команда.На самом деле вы можете указать больше:
источник
:!...
предложения в кавычки, чтобы оболочка не жаловалась. Так, например:git add --all -- ':!path/to/file1' ':!path/to/file2' ':!path/to/folder1/*'
.:!/path/to/(file1|file2)
?Хотя Бен Джексон прав, я подумал, что добавлю, как я использую это решение. Ниже приведен очень простой скрипт, который я использую (который я называю gitadd), чтобы добавить все изменения, кроме нескольких, которые я держу в списке в файле с именем
.gittrackignore
(очень похоже на то, как работает .gitignore).И вот как
.gittrackignore
выглядит мой нынешний .Я работаю над проектом Android, который я компилирую из командной строки при развертывании. Этот проект зависит от SherlockActionBar, поэтому на него нужно ссылаться в project.properties, но это мешает компиляции, так что теперь я просто набираю
gitadd
и добавляю все изменения в git без необходимости каждый раз удалять add.properties.источник
--
было до твоего комментария. Согласно man-страницам, это необязательно и не меняет результат команды (по крайней мере, в этом случае). Этот вопрос, кажется, подтверждает это, stackoverflow.com/questions/17800994/… . Поправьте меня, если я ошибаюсь, но кажется, что это означает «трактовать что-либо после--
как аргументы, а не опции / переключатели»--
вgit checkout
Я вижу в этом вопросе. Я не знал, что такое двойная черта, до нашего обмена тоже. Интересно, может лиgit checkout
двусмысленность между ветками и файлами повлиять, в той или иной форме,git reset
также.Чтобы сохранить изменения в файле, но не фиксировать, я сделал это
git add .
git reset -- main/dontcheckmein.txt
git commit -m "commit message"
чтобы убедиться, что файл исключен, сделайте
git status
источник
Используйте
git add -A
для добавления всех измененных и вновь добавленных файлов одновременно.пример
источник
источник
Попробуй это:
источник
Для конкретного случая, о котором идет речь, самым простым способом было бы добавить все файлы с расширением .c и пропустить все остальное:
Из git-scm (или / и
man git add
):Обратите внимание, что это означает, что вы также можете сделать что-то вроде:
добавить все файлы (которые не игнорируются), которые находятся в
main
папке. Вы можете даже сходить с ума с более сложными образцами:Выше будут добавлены все файлы, которые находятся в
s(any char)c
папке иService
где-то в их имени файла.Очевидно, вы не ограничены одним шаблоном на команду. То есть вы можете попросить git добавить все файлы с расширением .c и .h :
Эта ссылка может дать вам больше идей по шаблонам.
Я нахожу это особенно полезным, когда я делаю много изменений, но все же хочу, чтобы мои коммиты оставались атомарными и отражали постепенный процесс, а не мешанину изменений, над которыми я, возможно, работаю в то время. Конечно, в какой-то момент стоимость разработки сложных шаблонов превышает стоимость добавления файлов более простыми методами или даже одного файла за раз. Тем не менее, в большинстве случаев я легко могу указать только нужные мне файлы простым шаблоном и исключить все остальное.
Кстати, вам может понадобиться процитировать ваши шаблоны глобуса, чтобы они работали, но для меня это никогда не было так.
источник
Я использовал
git add --patch
немного и хотел что-то вроде этого, чтобы избежать необходимости постоянно попадать dв одни и те же файлы. Я набрал пару хакерских псевдонимов, чтобы выполнить работу:В моем случае я просто хотел постоянно игнорировать определенные минимизированные файлы, но вы могли бы заставить его использовать переменную окружения, как
$GIT_EXCLUDE_PATTERN
для более общего случая использования.источник
Изменения, которые необходимо зафиксировать: (используйте «git reset HEAD ...» для удаления)
источник
Вы можете попробовать это:
git add * && git reset main/dontcheckmein.txt
источник