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

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

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

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

0
10.03.2020, 09:05
1 ответ

Лучшее решение, которое я нашел до сих пор, состоит в том, чтобы создать список путей для перехода к git addпутем явного изучения индекса git и рабочего дерева.

Учитывая репозиторий:

git init.
echo $RANDOM > ignore-edited
echo $RANDOM > ignore-deleted
echo $RANDOM > add-edited
echo $RANDOM > add-deleted
git add.
git commit -m 'Initial commit'

echo $RANDOM > ignore-new
echo $RANDOM > ignore-edited
rm             ignore-deleted
echo $RANDOM > add-new
echo $RANDOM > add-edited
rm             add-deleted

и список файлов для обновления:

printf '%s\n' add-new add-edited add-deleted add-nonexistent | sort \
    > /tmp/filelist.txt

Мы можем создать список файлов, получив объединение между пересечением наших файлов, которые нужно добавить, и индексом, и пересечением наших файлов, которые нужно добавить, и теми, которые существуют в рабочем дереве:

comm -12 /tmp/filelist.txt <(git ls-files) \
    > /tmp/files-in-index.txt
while read -r line ; do test -e "$line" && printf -- '%s\n' "$line" ; done < /tmp/filelist.txt \
    > /tmp/files-in-worktree.txt
sort -um /tmp/files-in-index.txt /tmp/files-in-worktree.txt \
    > /tmp/files-to-add.txt
< /tmp/files-to-add.txt xargs git add

Или, в одном вызове:

sort -um \
    <(comm -12 /tmp/filelist.txt <(git ls-files)) \
    <(while read -r line ; do test -e "$line" && printf -- '%s\n' "$line" ; done < /tmp/filelist.txt) |
    xargs git add
0
28.04.2021, 23:20

Теги

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