Использование Git для работы с Subversion: игнорирование изменений в отслеживаемых файлах - PullRequest
2 голосов
/ 01 апреля 2010

В настоящее время я работаю с хранилищем Subversion, но я использую git для локальной работы на моей машине. Это значительно облегчает работу, но также делает некоторые грубые поступки в репозитории Subversion довольно явными, и это создает для меня проблемы.

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

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

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

Ответы [ 2 ]

4 голосов
/ 01 апреля 2010

Как сказал Натан , очистка этих файлов (отслеживание их) - разумный шаг.

Но если вы должны игнорировать отслеживаемые файлы (что не является родным способом Git, когда дело доходит до игнорирования файлов: Git игнорирует только неотслеживаемые файлы), вы можете настроить процесс, копирующий содержимое файлов вы хотите игнорировать и восстанавливать при коммите.

Первоначально я полагал, что нечеткий / чистый процесс , то есть драйвер фильтра gitattributes мог бы добиться цели:

alt text

, где:

  • процесс smudge создаст копию этих файлов (при обновлении рабочего дерева)
  • некоторые модификации происходят во время сборки
  • шаг очистки (во время фиксации) сотрет содержимое файлов с копией, сделанной на шаге 1.

НО, как указано в этом посте , это означало бы злоупотребление этим без сохранения файлом содержимого путем добавления контекста с состоянием (то есть полного пути к имени файл размазан / очищен).
И это явно запрещено Дж. К. Хамано:

Хотя я изначально думал об интерполяции "%P" с путем, в итоге я решил отказаться от него, чтобы отговорить людей от использования фильтра для преобразования с отслеживанием состояния, который меняет результаты в зависимости от времени, пути, коммита, ветви и прочего.

и даже Линус Торвальдс в то время имел некоторые оговорки по поводу всего механизма:

Я должен сказать, что я, очевидно, не большой поклонник игр, но различия очень чистые.

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

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

Но я не уверен, насколько правдивым является аргумент, который на самом деле. Я действительно верю в философию «дай им веревку». Я думаю, что вы, вероятно, можете по-королевски ввернуть себя в это, но эй, любой, кто делает это, только сам виноват


Таким образом, правильное место для добавления какого-либо механизма сохранения / восстановления (и эффективного игнорирования любых изменений в наборе отслеживаемых файлов в Git) было бы в хуках

  • post-checkout: вызывается при запуске git checkout после обновления рабочего дерева. Там вы можете запустить скрипт, который собирает все файлы, чтобы их игнорировать, и сохраняет их где-то.

  • pre-commit: вы можете запустить второй сценарий, который восстановит содержимое этих файлов, прежде чем получить предлагаемое сообщение журнала фиксации и выполнить фиксацию.

1 голос
/ 01 апреля 2010

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

Я не знаю, как заставить git игнорировать изменения в отслеживаемых файлах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...