Как "распаковывать" файл в 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). Если это так, то есть только два способа удалить этот файл:

  1. отметьте файл как удаленный и зафиксируйте.
  2. выполнить 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 под вашей основной папкой. Она должна частичное извлечение его.