Каков практический рабочий процесс для сохранения локальных изменений в git?

То, что я хочу сделать, уже описано в этом вопросе. Но я хочу решить эту проблему практичным и более общим образом. Таким образом, прецедент выглядит следующим образом:

  • У меня есть несколько локальных изменений в нескольких файлах web.config, createDb.sql или в любых других
  • Я не хочу фиксировать эти файлы, так как изменения относятся только к моей локальной машине
  • Эти файлы должны контролироваться версиями и, кроме того, некоторые из них часто применяются для некоторых (в частности, сценариев sql), поэтому я хочу получать обновления для этих файлов
  • я do хочет зафиксировать все остальные файлы
  • Я хочу иметь возможность делать это без трений, в одной команде (используя posh- git, поэтому приветствие powershell)

Связанное решение говорит, что используется git add -p и не практично, скучно собирать куски вручную все время или, может быть, есть более удобный способ сделать это?

Например, может работать одно из следующих:

  • если есть возможность фильтровать файлы, которые находятся в моей рабочей копии, прежде чем добавлять их в индекс, что-то вроде git -add -A -EXCEPT web.config crateDb.sql. Затем я могу сопоставить псевдоним git с этим и тем, что он.
  • если есть возможность отменить заявку. Я хочу удалить изменения из одного экземпляра из рабочей копии. Поэтому мне нужно будет сделать что-то вроде git stash -deapply перед каждой фиксацией, которая также прекрасна.

Проблема очень распространена, и странно, что в настоящее время решения нет. Например. У TortoiseSVN есть функция "игнорировать-на-коммите", Perforce позволяет хранить этот тип локальных изменений в отдельном списке изменений и никогда не отправлять его...

Любые мысли?

Ответ 1

Вы можете попробовать выполнить следующие действия перед выполнением git:

git update-index --assume-unchanged web.config crateDb.sql

Из справки git:

- предположим, без изменений

- no-expected-unchanged

Когда эти флаги указаны, имена объектов, записанные для пути не обновляются. Вместо этого эти параметры устанавливаются и отмените бит "предполагать неизменный" для путей. Когда "предположим без изменений", git перестает проверять рабочие файлы дерева для возможные изменения, поэтому вам нужно вручную отключить бит, чтобы сказать git при изменении рабочего файла дерева. Иногда это полезно при работе с большим проектом в файловой системе, которая работает очень медленно lstat (2) системный вызов (например, cifs).

Эта опция также может использоваться как механизм грубого файлового уровня для игнорировать незафиксированные изменения в отслеживаемых файлах (сродни тому, что .gitignoreдля файлов без следа). git завершится с ошибкой (изящно) в случае необходимости для изменения этого файла в индексе, например. при слиянии в фиксации; Таким образом, в случае, если файл с предполагаемым неискаженным изменен вверх, вам понадобится для ручной обработки ситуации.