#git #version-control #msysgit
#git #контроль версий #msysgit
Вопрос:
Я уже некоторое время играюсь с этим, и мне это очень нравится. Позвольте мне описать мой случай.
У меня есть два компьютера, на которых у меня есть мои репозитории и удаленный репозиторий.
в моих файлах у меня есть один файл конфигурации, который отличается на обоих компьютерах. поэтому, когда я запускаю свои компьютеры, мне нужно извлекать не этот конфигурационный файл, а все остальное. Как я могу этого добиться?
Я читал о файлах .gitignore, но я не могу понять, как они работают, или они то, что мне нужно в моем случае.
Ответ №1:
.gitignore предназначен для файлов / папок, которые вы еще не зарегистрировали. По сути, это текстовый файл, который вы создаете в репозитории и который содержит список путей относительно каталога, в который он был помещен, который Git проигнорирует. Вы можете вернуть файл .gitignore как часть репозитория. вы можете найти примеры — в конце этой страницы
Однако, если ваш файл уже был проверен в репозитории, вы можете использовать:
git update-index --assume-unchanged file
который скажет Git игнорировать любые изменения в этом файле, внесенные в будущем. Однако это локальная конфигурация, поэтому вам придется делать это на каждом компьютере, который вы проверяете. Вы можете отменить это, выполнив:
git update-index --no-assume-unchanged file
В зависимости от того, какую конфигурацию содержит этот файл, может быть хорошей практикой иметь файл конфигурации скелета / примера в репозитории — аналогично тому, что ребята из PHP делают с config_example.php , который затем используется людьми для создания config.php , который, в свою очередь, никогда не проверяется в репозитории, потому что он игнорируется.
Комментарии:
1.
git update-index --assume-unchanged
у меня сработало (без дефиса послеgit
). Использование git версии 1.8.1.2 — OS X 10.8.2. Спасибо!2. @guapolo В прошлом большинство команд git имели форму
git-COMMAND
, а неgit COMMAND
, поэтому в ответе стоит дефис3. но что это за файл, уже отслежено. Я выполнил вашу команду git с параметром —assume-unchanged, а затем попытался извлечь мастер, он по-прежнему выдает мне сообщение об ошибке: ошибка: ваши локальные изменения в ‘conf. py’ будет перезаписан слиянием. Прерывание.
4.@fanchyna Что ж — это верно. Это даже есть в документации по адресу git-scm.com/docs/git-update-index
This option can be also used as a coarse file-level mechanism to ignore uncommitted changes in tracked files (akin to what .gitignore does for untracked files). Git will fail (gracefully) in case it needs to modify this file in the index e.g. when merging in a commit; thus, in case the assumed-untracked file is changed upstream, you will need to handle the situation manually.
5. Сработает ли это в случае, когда я пытаюсь обновить локальную копию, выполнив
git pull --rebase origin master
? Я попробовал это, и это не сработало. Я хотел, чтобы он игнорировал файл при извлечении с удаленного устройства.
Ответ №2:
Если вы хотите игнорировать файл config.local
в своем репозитории, вы просто создаете .gitignore
файл со /config.local
строкой в нем, добавляете его и фиксируете в репозитории. Вот и все.
Ответ №3:
Возможно, поможет пример. Вот раздел моего .gitignore
файла, который также является частью файлов проекта:
# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~
*.pro.user.*
tmp/
release/
debug/
bin/
moc_*
ui_*
*.bck
*_debug
#Visual Studio stuff
lib/*.lib
*.ncb
*.suo
Это всего лишь часть файла. Вам нужно будет настроить свой в зависимости от вашего проекта.
Дело в том, что формат гибкий, и у вас не должно возникнуть проблем с общим доступом к файлу. Если у вас возникли проблемы, исключите его из репозитория.
Комментарии:
1. нужно ли мне поместить это в корневую папку?
2. Обычно я храню один из них в корневом каталоге. А затем создайте специальные файлы в папке для особых случаев, которые я не хочу помещать в файл «master .gitignore».
3. Я добавил игнорируемый файл, но когда я изменяю конфигурационный файл, в статусе он по-прежнему показывает этот файл как измененный. так ли это должно быть?
4. Это уже добавлено? Что
git status
говорит точно — только что измененный?5. О, наконец-то это работает, я удалил его из репозитория, и теперь он игнорируется. Спасибо
Ответ №4:
.gitignore
Файл может быть тем, что вам нужно. В этом файле вы перечисляете шаблоны файлов — по одному в строке — что приведет к тому, git status
что отчет по этим файлам не будет предоставляться.
Но если вы уже зафиксировали эти файлы, они будут извлечены при выполнении git pull
.
Вы также можете зафиксировать .gitignore
файл в репозитории. Таким образом, одни и те же файлы будут игнорироваться на всех компьютерах.
Комментарии:
1. Примечание о фиксации
.gitignore
: если вы не планируете ее фиксировать, лучше использовать.git/info/exclude
вместо этого.2. Спасибо за этот дополнительный комментарий!
Ответ №5:
Пожалуйста, также обратите внимание, что
git update-index --assume-unchanged file
не поможет, если вы попытаетесь переключить ветку
$ git checkout master
error: Your local changes to the following files would be overwritten by checkout:
file
Please commit your changes or stash them before you switch branches.
Aborting
Ответ №6:
Если файл уже отслеживается Git, .gitignore не применяется. Git продолжит отслеживать изменения в этом файле. Добавьте файл в свой файл .gitignore. Выполните следующую команду: git rm —cached Зафиксирует удаление файла и обновленного файла .gitignore в вашем репозитории.