Как "распаковывать" файл в svn и / или git
это происходит со мной все время. Я случайно версия файла, я не хочу быть версионным (т. е. разработчик/машина конкретных конфигурационных файлов).
Если я зафиксирую этот файл, я испорчу пути на всех других машинах разработчика - они будут недовольны.
Если я удалю файл из управления версиями, он будет удален с других машин разработчиков - они будут недовольны.
Если я решу никогда не фиксировать файл, у меня всегда есть " грязный" проверка-я несчастлив.
является ли чистый способ "распаковки" файла из контроля версий, что приведет к тому, что никто не будет несчастен?
edit: попытка прояснить немного: я уже отправил файл в репозиторий, и я хочу удалить его только из управления версиями - я специально не хочу, чтобы он был физически удален из всех, кто делает проверку. Сначала я хотел, чтобы его проигнорировали.
ответ: если бы я мог принять второй ответ, это будет этой. Он отвечает на мой вопрос относительно git-принятый ответ касается svn.
15 ответов
SVN версии 1.5 поддерживает удаление / удаление файла из репозитория без потери локального файла
взято из http://subversion.tigris.org/svn_1.5_releasenotes.html
New --keep-local опция сохраняет путь после удаления..
Delete (remove) теперь принимает параметр --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 вы просто щелкните правой кнопкой мыши файл в окне фиксации и выберите Revert...
в командной строке используйте 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:ignore родительского каталога свойство:
svn propedit svn:ignore .
2. Удалить каталог:
svn rm mydir
3. Commit
обратите внимание, что, когда другие разработчики делать обновление с SVN каталог не будет удалены. СВН просто вместо unversions его.
вы можете распаковывать все файлы в текущем каталоге с помощью этой команды. The sed
бит меняет порядок, чтобы svn мог его обработать:
find . | sed '1!G;h;$!d'| awk '{print "svn rm --keep-local " }'
как уже говорилось в других ответах, один файл не версируется с этим:
svn rm --keep-local yourFileNameXXX
в Windows, если то, что вы ищете, копирует папку в другое место и удаляет ее из git, так что вы больше не видите значки, вы просто удаляете .папка git. Этот.папка git скрыта, поэтому вам нужно перейти к опции Organize / Folder и Search, отобразить опцию hidden Files под вашей основной папкой. Она должна частичное извлечение его.