Как заставить Git игнорировать файл, добавив комментарий внутри этого файла вместо добавления файла в .gitignore? - PullRequest
0 голосов
/ 13 октября 2019

Скажем, я хочу сказать Git не отслеживать файлы, содержащие строку //ignoreMe!, как я могу это сделать?

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

Iможет легко заставить компиляторы добавить некоторый контент, такой как //GITIGNORE, но сложнее создать правила, которые хорошо обобщаются, чтобы соответствовать именам файлов в этом конкретном проекте.

Ответы [ 3 ]

3 голосов
/ 13 октября 2019

AFAIK, в Git нет встроенного способа сделать это (возможно, это потребует дополнительной производительности).

Однако, это должно быть возможно автоматизировать. Сначала мы хотим найти файлы, которые нужно игнорировать:

grep --files-with-match --recursive '// GITIGNORE' .

Для каждого результата мы можем проверить, не игнорируется ли он уже с git check-ignore. Если нет, мы добавляем его в локальный файл игнорирования.

Собираем все это вместе в скрипт:

#!/bin/bash

grep --files-with-match --recursive '// GITIGNORE' . | while read filename
  do
    if [ $(git check-ignore --quiet "$filename") -ne 0 ]
    then
      echo "$filename" >> .git/info/exclude
    fi
  done

Если вы добавляете шаг сборки для запускатот сценарий в конце сборки, который должен дать желаемый результат. В зависимости от того, как часто меняются игнорируемые имена файлов, вы можете время от времени усекать .git/info/exclude.

(Если у вас нет доступа к grep или bash, должна быть возможностьсделать то же самое с другими инструментами в вашей системе выбора.)

1 голос
/ 13 октября 2019

Игнорировать артефакты сборки по папкам.

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

Почему бы не взглянуть на gitignore VisualStudio *1006*. В частности:

# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
[Ll]ogs/
1 голос
/ 13 октября 2019

Ваш компилятор дает вам достаточно контроля, чтобы вы могли скомпилировать произвольные маркеры в скомпилированные выходные данные, которых нет в исходном коде, но настолько мало, что вы не можете выбрать ничего идентифицируемого для имен или местоположений выходных файлов? Это так глупо, что я испытываю желание понизить голос в слабой попытке изгнать мысль, но уже слишком поздно, у меня будут кошмары;и в любом случае я хотел бы думать, что сочувствие к вашему возможному положению могло бы остаться в моей руке.

Нет, обработка игнорирования Git проверяет только имена путей, ничего больше.

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