Как "отменить" файл в svn и/или git

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

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

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

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

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

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

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

Ответ 1

SVN версия 1.5 поддерживает удаление/удаление файла из репозитория без потери локального файла

взято из http://subversion.tigris.org/svn_1.5_releasenotes.html

Новый параметр --keep-local сохраняет путь после удаления.

Удалить (удалить) теперь принимает параметр -keep-local для локального сохранения своих целей, поэтому пути не будут удалены, даже если они не модифицированы.

Ответ 2

В Git, чтобы удалить его из дерева, но НЕ из рабочего каталога, который, как я думаю, вам нужен, вы можете использовать флаг -cached, то есть:

git rm --cached <filename>

Ответ 3

Если вы случайно "добавили" файл в svn, и вы его не зафиксировали, вы можете вернуть этот файл и удалить его.

Ответ 4

Не пробовав...

В git, если ваши изменения не были распространены в другой репозиторий, вы должны иметь возможность git rm затронутого файла (ов), git rebase --interactive, чтобы изменить порядок фиксации удаления сразу после фиксации в которые вы случайно добавили оскорбительные файлы, а затем сквойте эти два коммита вместе.

Конечно, это не поможет, если кто-то потянул ваши изменения.

Ответ 5

Похоже, вы уже добавили и перенесли файл в подрывную деятельность (я предполагаю, что вы используете Subversion). Если это так, то есть только два способа удалить этот файл:

  • Отметьте файл как удаленный и зафиксируйте.
  • Выполните svnadmin dump, отфильтруйте версию, в которой вы случайно зафиксировали файл, и выполните svnadmin load.

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

Ответ 6

Посмотрите svn: ignore и .gitignore - эти функции позволяют вам иметь дополнительные файлы в вашем контроле, которые игнорируются вашим RCS (при выполнении операции "status" или что-то еще).

Для конфигурационных файлов, специфичных для машины, хорошей возможностью является проверка файла с дополнительным расширением ".sample", т.е. config.xml.sample. Отдельные разработчики сделают копию этого файла в config.xml и настроят его для своей системы. С помощью svn: ignore или .gitignore вы можете гарантировать, что файл без преобразования config.xml не будет отображаться как грязный все время.

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

Ответ 7

Чтобы полностью удалить файл из репозитория git (скажем, вы написали файл с паролем в нем или случайно запустили временные файлы)

git filter-branch --index-filter 'git update-index --remove filename' HEAD

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

Ответ 8

Чтобы удалить файл, уже находящийся в исходном элементе управления:

git rm <filename>

а затем

git commit -m ...

Вы должны добавить каждый файл, который хотите игнорировать, в файл .gitignore. Я также всегда проверяю файл .gitignore на мой репозиторий, поэтому, если кто-то проверяет код на своем компьютере, и файл снова генерируется, он не будет "видеть" его как "грязный".

Конечно, если вы уже сделали файл, а кто-то еще получил ваши изменения на другом компьютере, вам придется изменить каждый локальный репозиторий, чтобы изменить историю. По крайней мере, это возможное решение с git. Я не думаю, что svn позволит вам это сделать.

Если файл уже находится в главном репозитории (git) или на сервере (svn), я не думаю, что есть лучшее решение, чем просто удаление файла в другом коммите.

Ответ 9

Для SVN вы можете вернуть файлы, которые еще не были сохранены. В TortoiseSVN вы просто щелкните файл правой кнопкой мыши в окне фиксации и выберите Revert...

В командной строке используйте svn revert [файл]

Не знаю о GIT, поскольку я никогда не использовал его.

Ответ 10

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

Вам нужно будет сохранить файл в другом месте и удалить его из управления версиями. Затем скопируйте резервную копию еще раз.

Это система контроля версий после всех...;)

Ответ 11

Вы можете исключить файлы из подрывной программы с параметром глобального игнорирования
http://svnbook.red-bean.com/en/1.1/ch07.html#svn-ch-7-sect-1.3.2
ознакомьтесь с документацией для деталей

Ответ 12

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

Что касается этого конкретного момента, вы можете захотеть .gitignore файл, как другие предложили, или использовать схему, подобную той описанный в this ответить .

Ответ 13

Два простых шага в SVN:
1. Добавьте этот каталог в родительский каталог svn: ignore свойство:

svn propedit svn:ignore .  

2. Удалить каталог:

svn rm mydir

3. Фиксировать

Обратите внимание, что когда другие разработчики выполняют svn update, этот каталог не будет удален. SVN только разворачивает его.

Ответ 14

Вы можете развернуть все файлы в текущем каталоге с помощью этой команды. Бит sed меняет порядок, поэтому svn может его обработать:

find . | sed '1!G;h;$!d'| awk '{print "svn rm --keep-local " $1}'

Как уже было сказано в других ответах, один файл не был преобразован с помощью этого:

svn rm --keep-local yourFileNameXXX

Ответ 15

В Windows, если то, что вы ищете, копирует папку в другое место и удаляет ее из git, так что вы больше не видите значки, вы просто удаляете папку .git. Папка .git скрыта, поэтому вам нужно перейти в раздел "Упорядочить/Папка и параметры поиска", "Отобразить скрытые файлы" в главной папке. Он должен отменить его.