Как "unversion" файл в svn и / или git



это происходит со мной все время. Я случайно версия файла, я не хочу быть версионным (т. е. разработчик/машина конкретных конфигурационных файлов).



Если я зафиксирую этот файл, я испорчу пути на всех других машинах разработчика - они будут недовольны.



Если я удалю файл из управления версиями, он будет удален с других машин разработчиков - они будут недовольны.



Если я решу никогда не фиксировать файл, у меня всегда есть " грязный" выезд-я недоволен.



является ли чистый способ "unversion" файл из контроля версий, что приведет к тому, что никто не будет несчастен?



edit: пытаясь немного прояснить: я уже отправил файл в репозиторий, и я хочу только удалить его из управления версиями - я специально не хочу, чтобы он был физически удален из всех, кто делает проверку. Я изначально хотел, чтобы это было проигнорировано.



ответ: если бы я мог принять второй ответ, это было бы так. Оно отвечает на мой вопрос относительно git-принятый ответ касается svn.

666   15  

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

  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 вы просто щелкните правой кнопкой мыши файл в окне фиксации и выберите Отменить...

в командной строке используйте 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 mydir

3. Совершение

обратите внимание, что, когда другие разработчики делать обновление 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

    Ничего не найдено.