Как "unversion" файл в svn и / или git
это происходит со мной все время. Я случайно версия файла, я не хочу быть версионным (т. е. разработчик/машина конкретных конфигурационных файлов).
Если я зафиксирую этот файл, я испорчу пути на всех других машинах разработчика - они будут недовольны.
Если я удалю файл из управления версиями, он будет удален с других машин разработчиков - они будут недовольны.
Если я решу никогда не фиксировать файл, у меня всегда есть " грязный" выезд-я недоволен.
является ли чистый способ "unversion" файл из контроля версий, что приведет к тому, что никто не будет несчастен?
edit: пытаясь немного прояснить: я уже отправил файл в репозиторий, и я хочу только удалить его из управления версиями - я специально не хочу, чтобы он был физически удален из всех, кто делает проверку. Я изначально хотел, чтобы это было проигнорировано.
ответ: если бы я мог принять второй ответ, это было бы так. Оно отвечает на мой вопрос относительно git-принятый ответ касается svn.
15 ответов:
SVN версии 1.5 поддерживает удаление / удаление файла из репозитория без потери локального файла
взято из http://subversion.tigris.org/svn_1.5_releasenotes.html
New --keep-local опция сохраняет путь после удаления..
Delete (удалить) теперь принимает параметр --keep-local, чтобы сохранить свои цели локально, поэтому пути не будут удалены, даже если они не изменены.
в Git, чтобы удалить его из дерева, но не из рабочего каталога, который я думаю, что вы хотите, вы можете использовать флаг --cached, то есть:
git rm --cached <filename>
Если вы случайно "добавляете" файл в svn, и вы его не зафиксировали, вы можете вернуть этот файл, и он удалит добавление.
не попробовав его...
в git, если ваши изменения не были распространены в другой репозиторий, вы должны уметь
git rmсоответствующий файл(ы),git rebase --interactiveчтобы изменить порядок фиксации удаления, чтобы быть сразу после фиксации, в которой вы случайно добавили файлы-нарушители, а затем раздавить эти два фиксации вместе.конечно, это не поможет, если кто-то еще вытащил ваши изменения.
похоже, что вы уже добавили и зафиксировали файл в subversion (я предполагаю, что вы используете Subversion). Если это так, то есть только два способа удалить этот файл:
- отметьте файл как удаленный и зафиксируйте.
- выполнить
svnadmin dump, отфильтровать ревизию, где вы случайно зафиксировали файл и выполнитьsvnadmin load.поверьте мне, вы действительно не хотите делать номер 2. Это сделает недействительными все рабочие копии репозитория. Лучше всего сделать номер 1, отметить файл как проигнорированный и извиниться.
посмотрите svn: игнорировать и .gitignore-эти функции позволяют вам иметь дополнительные файлы в вашей проверке, которые игнорируются вашим RCS (при выполнении операции "статус" или что-то еще).
для файлов конфигурации, специфичных для компьютера, хорошим вариантом является возврат файла с именем extra ".пример " расширение, т. е.
config.xml.sample. Отдельные разработчики сделают копию этого файла вconfig.xmlи настроить его под свою систему. С SVN:игнорировать или .gitignore вы можете убедиться, что неверсионныйconfig.xmlфайл не отображается как грязный все время.В ответ на ваше редактирование: если вы удалите файл из репозитория сейчас, то ваши разработчики получат конфликт в следующий раз они сделать обновление (при условии, что они все изменили файл для своей системы). Они не потеряют свои локальные изменения, они будут восстановлены откуда-то. Если они не внесли никаких локальных изменений, то их конфигурационный файл исчезнет, но они могут просто повторно получить предыдущий из системы управления версиями и использовать это.
чтобы полностью удалить файл из репозитория git (скажем, вы ввели файл с паролем в нем или случайно ввели временные файлы)
git filter-branch --index-filter 'git update-index --remove filename' HEADтогда я думаю, что вам нужно зафиксировать и нажать-f, если он находится в удаленных ветвях (помните, что это может раздражать людей, если вы начнете изменять историю репозитория.. и если они вытащили из вас раньше, у них все еще может быть файл)
удалить файл уже в исходном коде:
git rm <filename>а то
git commit -m ...вы должны добавить каждый файл, который вы хотите игнорировать на .файла.gitignore Я дополнительно всегда проверяю .gitignore файл в мой репозиторий, так что если кто-то проверяет код на своей машине, и файл генерируется снова, он не будет "видеть" его как "грязный".
конечно, если вы уже зафиксировали файл и кто-то другой получил ваши изменения на другой машине, вы бы чтобы изменить каждый локальный репозиторий для изменения истории. По крайней мере, это возможное решение с git. Я не думаю, что svn позволит вам это сделать.
Если файл уже находится в главном репозитории (git) или на сервере (svn), я не думаю, что есть лучшее решение, чем просто удалить файл в другой фиксации.
для SVN вы можете вернуть файлы, которые вы еще не зафиксировали. В TortoiseSVN вы просто щелкните правой кнопкой мыши файл в окне фиксации и выберите Отменить...
в командной строке используйте svn revert [file]
Не знаю о GIT, так как я никогда не использовал его.
насколько я знаю, нет простого способа удалить добавленный файл из управления версиями в svn после его фиксации.
вам придется сохранить файл в другом месте и удалить его из системы управления версиями. Чем скопировать резервную копию обратно.
система контроля версий в конце концов... ;)
вы можете исключить файлы из subversion с помощью global-ignore setting
http://svnbook.red-bean.com/en/1.1/ch07.html#svn-ch-7-sect-1.3.2
проверьте документацию для деталей
Я там f я решил никогда не фиксировать файл, у меня всегда есть "грязная" проверка - я несчастлив.
что касается этого конкретного момента, вы можете захотеть
.gitignoreфайл как другие предложили, или использовать схему, как описано в этот ответ мой.
два простых шага в SVN:
1. Добавьте этот каталог в svn родительского каталога: игнорировать свойство:svn propedit svn:ignore .2. Удалить каталог:
svn rm mydir3. Совершение
обратите внимание, что, когда другие разработчики делать обновление svn каталог не будет удалены. SVN просто разворачивает его вместо этого.
вы можете отменить преобразование всех файлов в текущем каталоге с помощью этой команды. Элемент
sedнемного изменяет порядок, так что СВН может обрабатывать это:find . | sed '1!G;h;$!d'| awk '{print "svn rm --keep-local " }'как уже говорилось в других ответах, один файл не версируется с этим:
svn rm --keep-local yourFileNameXXX
в Windows, если то, что вы ищете, копирует папку в другое место и удаляет ее из git, так что вы больше не видите значки, вы просто удаляете .папка git. Этот.папка git скрыта, поэтому вам нужно перейти к параметрам "организация / папка" и "поиск", "отображение скрытых файлов" в вашей основной папке. Она должна частичное извлечение его.
Comments