Git - игнорировать файлы на основе режима

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

Например:

gcc -o foo foo.c

Я знаю, что могу добавить 'foo' в мой файл .gitignore, но если я захочу изменить имя исполняемого файла, мне нужно будет обновить файл .gitignore...

Ответ 1

На самом деле вам будет лучше вручную поддерживать gitignore, возможно. Вы можете сделать это:

*
!*.*

чтобы исключить все, а затем включить все с помощью ".", но я подозреваю, что ваши каталоги не имеют расширений. Конечно, отслеживаемые каталоги по-прежнему будут отслеживаться, но если вы добавите новый, git-status не увидит его, и вам нужно будет использовать add -f для его ввода.

Вероятно, неплохо предположить, что все файлы без расширения не должны отслеживаться. В конечном итоге вы можете получить некоторые из них - например, README и INSTALL довольно распространены. Это намного хуже, чтобы случайно проигнорировать файл, а не модифицировать gitignore. Изменение gitignore может занять несколько секунд, но это будет очевидно, когда вам это нужно. Если вы случайно проигнорируете файл, вы можете легко его не проверять и потерять работу.

Ответ 2

Я обычно обрабатываю это с помощью make файлов. В моем файле Makefile у меня есть имя исполняемого файла $(name), а затем я делаю это:

#first rule
all: gitignoreadd ... more depends
    ... some commands ...

gitignoreadd:
    grep -v "$(name)" .gitignore > temp
    echo $(name) >> temp
    mv temp .gitignore

gitignoreremove:
    grep -v "$(name)" .gitignore > temp
    mv temp .gitignore

Это правило может быть просто зависимым от make где-то подходящим. Тогда вы обычно имеете правило "make clean" следующим образом:

clean: gitignoreremove
   rm *.o *.othergarbagefiles $(name)

Это должно сделать трюк. Это взломать, но это работает для меня. Единственное, что вы должны выполнить make clean перед изменением имени, чтобы автоматически очистить все.