Я клонировал проект, содержащий некоторые .csproj
файлы. Мне не нужны/как локальные файлы csproj
, которые отслеживаются Git (или воспитываются при создании патча), но явно они необходимы в проекте.
Я добавил *.csproj
в свой LOCAL .gitignore
, но файлы уже находятся в репо.
Когда я набираю статус Git, он показывает мои изменения на csproj
, которые меня не интересуют отслеживание или отправка патчей.
Как удалить "отслеживание" этих файлов из моего личного репо (но сохраните их в источнике, чтобы я мог их использовать), чтобы я не видел изменений, когда я делаю статус (или создаю патч )?
Есть ли правильный/канонический способ справиться с этой ситуацией?
Просто вызов git rm --cached
для каждого из файлов, которые вы хотите удалить из контроля версий, должен быть прекрасным. Пока ваши локальные шаблоны игнорируются, вы не увидите эти файлы, включенные в вывод состояния git.
Обратите внимание, что это решение удаляет файлы из репозитория, поэтому всем разработчикам необходимо будет поддерживать собственные локальные (неконтролируемые контролируемые) копии файла
Чтобы предотвратить git от обнаружения изменений в этих файлах, вы также должны использовать эту команду:
git update-index --assume-unchanged [path]
Что вы, вероятно, захотите сделать: (ниже @Ryan Taylor answer)
- Это означает, что git вам нужна собственная независимая версия файла или папки. Например, вы не хотите перезаписывать (или удалять) создания/создания конфигурационных файлов.
git update-index --skip-worktree <path-name>
Полный ответ здесь в этом URL-адресе: http://source.kohlerville.com/2009/02/untrack-files-in-git/
Если вы выполняете git update-index --assume-unchanged file.csproj
, git не будет автоматически проверять файл .csproj на изменения: это остановит их при появлении статуса git при каждом изменении. Таким образом, вы можете пометить все ваши файлы .csproj таким образом, хотя вам придется вручную отмечать любые новые, которые отправляет вам репозиторий вверх. (Если у вас их есть в .gitignore
или .git/info/exclude
, то те, которые вы создаете, будут проигнорированы)
Я не совсем уверен, какие файлы .csproj... если они что-то вроде линий IDE-конфигураций (похожие на файлы Eclipse.eclipse и .classpath), то я бы предложил, чтобы они никогда не были источником - контролируется вообще. С другой стороны, если они являются частью системы сборки (например, Make файлы), то ясно, что они должны --- и способ получить дополнительные локальные изменения (например, из local.csproj a la config.mk) будет полезен: разделите сборку на глобальные части и локальные переопределения.
git update-index --no-assume-unchanged file.csproj
Это двухэтапный процесс:
Удалите отслеживание файла/папки - но сохраните их на диске - используя
git rm --cached
Теперь они не отображаются как "измененные", но все равно отображаются как
untracked files in git status -u
Добавьте их в .gitignore
Есть 3 варианта, вы, вероятно, хотите # 3
1. Это сохранит локальный файл для вас, но удалит его для кого-либо еще, когда он потянет.
git rm --cached <file-name>
или git rm -r --cached <folder-name>
2. Это для оптимизации, например, папки с большим количеством файлов, например. SDK, которые, вероятно, никогда не изменятся. Он сообщает git прекратить проверку этой огромной папки каждый раз для изменений, поскольку она не будет иметь.
git update-index --assume-unchanged <path-name>
3. Это означает, что git вам нужна собственная независимая версия файла или папки. Например, вы не хотите перезаписывать (или удалять) файлы конфигурации для создания/размещения.
git update-index --skip-worktree <path-name>
Важно знать, что git update-index
не будет распространять с помощью git, и каждый пользователь должен будет запустить его самостоятельно.
Принятый ответ по-прежнему не работает для меня
Я использовал
git rm -r --cached.
git добавить.
git commit -m "fixing .gitignore"
Найден ответ от здесь
Если у вас есть весь проект локально, но забыл добавить вас git игнорировать и теперь отслеживать некоторые ненужные файлы, используйте эту команду, чтобы удалить все
git rm --cached -r .
убедитесь, что вы находитесь в корне проекта.
Затем вы можете сделать обычный
git add .
git commit -m 'removed all and added with git ignore'
git push origin master
Надеюсь, что это поможет людям, которые должны внести изменения в их .gitignore
или забыли все вместе.
Чтобы сэкономить время, правила, которые вы добавляете в свой .gitignore, можно использовать для удаления нескольких файлов/папок i.e.
git rm --cached app/**/*.xml
или
git rm --cached -r app/widgets/yourfolder/
e.t.c.
Как указано в других ответах, выбранный ответ неверен.
ответ на другой вопрос предполагает, что это может быть skip-worktree, который потребуется.
git update-index --skip-worktree <file>
--skip-worktree
используется для сохранения файла в хранилище, но не для отслеживания его изменений . Как говорится в вашем ответе: --skip-worktree полезен, когда вы указываете git не трогать определенный файл, потому что разработчики должны изменить его
Чтобы предотвратить мониторинг файла с помощью git
git update-index --assume-unchanged [file-path]
И чтобы вернуть его обратно, используйте
git update-index --no-assume-unchanged [file-path]
Я предполагаю, что вы пытаетесь удалить один файл из git. для этого я бы рекомендовал ниже команду.
git update-index -assume-неизменный
Ex - git update-index --assume-unchanged .gitignore.idea/compiler.xml
Проблема может быть вызвана порядком работы. Если вы сначала изменили .gitignore, тогда git rm --cached xxx, вам, возможно, придется столкнуться с этой проблемой.
Правильное решение:
Инвариант заказа!
Перезагрузите .gitignore после изменения!
Я предполагаю, что вы спрашиваете, как удалить ВСЕ файлы в определенной папке или в папку bin, а не выбирать каждый файл отдельно.
Вы можете использовать эту команду: git rm -r -f /<floder-name>\*
Убедитесь, что вы находитесь в родительском каталоге каталога.
Эта команда будет рекурсивно "удалять" все файлы, находящиеся в файле bin/или build/folders. Под словом delete я подразумеваю, что git будет притворяться, что эти файлы "удалены", и эти файлы не будут отслеживаться. git действительно отмечает, что эти файлы находятся в режиме удаления.
Убедитесь, что ваш .gitignore готов к предстоящим фиксациям.
Документация: git rm
.csproj
, который является очень важной частью любого проекта. Изменения в файле.csproj.user
или любых.Publish.XML
файлах.Publish.XML
которые я полностью понимаю, не отслеживая, но я заинтригован тем, почему вы не хотите отслеживать.csproj
…