Найти файлы, которых нет в .gitignore

Для пользователей Mac:

На Mac head -n -1 не работает. Вместо этого переверните файл, отрежьте первую строку, а затем переверните ее обратно:

tail -r file.txt | tail -n +2 | tail -r

Объяснение:

  1. tail -r : меняет порядок строк во входных данных

  2. tail -n +2 : печатает все строки, начиная со второй строки во входных данных

10
11.04.2017, 12:55
4 ответа

git предоставляет git-check-ignore , чтобы проверить, исключен ли файл с помощью .gitignore .

Таким образом, вы можете использовать:

find . -type f -not -path './node_modules*' \
       -a -not -path '*.git*'               \
       -a -not -path './coverage*'          \
       -a -not -path './bower_components*'  \
       -a -not -name '*~'                   \
       -exec sh -c '
         for f do
           git check-ignore -q "$f" ||
           printf '%s\n' "$f"
         done
       ' find-sh {} +

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

12
27.01.2020, 19:59

Вы можете использовать массив, в котором будет выполняться команда bash.

Наличие таких файлов:

touch file1 file2 file3 some more file here

И наличие файла игнорирования , подобного этому

cat <<EOF >ignore
file*
here
EOF

Использование

arr=($(cat ignore));declare -p arr

приведет к следующему:

declare -a arr='([0]="file" [1]="file1" [2]="file2" [3]="file3" [4]="here")'

Затем вы можете использовать любую технику для манипулирования этими данными.

Лично я предпочитаю что-то вроде этого:

awk 'NR==FNR{a[$1];next}(!($1 in a))'  <(printf '%s\n' "${arr[@]}") <(find . -type f -printf %f\\n)
#Output
some
more
ignore
2
27.01.2020, 19:59

для этого есть команда git: например,

my_git_repo % git grep --line-number TODO                                                                                         
desktop/includes/controllers/user_applications.sh:126:  # TODO try running this without sudo
desktop/includes/controllers/web_tools.sh:52:   TODO: detail the actual steps here:
desktop/includes/controllers/web_tools.sh:57:   TODO: check if, at this point, the menurc file exists. i.e. it  was created

Как вы заявили, он будет выполнять базовую команду grep с большинством обычных параметров grep, но не будет искать .git или какие-либо файлы или папки в вашем .gitignore ] файл.
Подробнее см. man git-grep

Подмодули:

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

9
27.01.2020, 19:59

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

$ git ls-files

. Эта команда имеет ряд параметров для отображения, например. кэшированные файлы, неотслеживаемые файлы, измененные файлы, игнорируемые файлы и т. д. См. git ls-files --help.

11
27.01.2020, 19:59

Теги

Похожие вопросы