LINUX.ORG.RU
ФорумAdmin

Restic and .gitignore

 restic


0

1

Тут понадбилось разобраться с сабжем, почитал инет, потестировал.

https://stackoverflow.com/questions/1279533/is-there-a-way-to-tell-git-to-only-include-certain-files-instead-of-ignoring-cer

# Ignore everything under "directory"
directory/*
# But don't ignore "another_directory"
!directory/another_directory
# But ignore everything under "another_directory"
directory/another_directory/*
# But don't ignore "file_to_be_staged.txt"
!directory/another_directory/file_to_be_staged.txt

А представьте директорию глубиной в 20 :(

Хм. А синтаксис gitignore точно делал адекватный человек?

★★★★★
Ответ на: комментарий от LightDiver

Попробуй и будешь удивлен как оно работает. Я долго не верил думал руки кривые, после долго чтения инета я понял это так сделано. Смахивает на бред.

P.S. У меня есть надежда что я все таки не прав и меня ткнут мордой, но что то верится с трудом :(

mx__ ★★★★★
() автор топика
Последнее исправление: mx__ (всего исправлений: 2)
Ответ на: комментарий от LightDiver

Объясняю, вот к примеру есть дира: /home

Нужно в ней все пропустить и оставить только диру внутри: /home/user1/data1/data2/data3/data4/data5/data6

Вон пример выше, это достигается только таким синтаксисом, полный бред.

mx__ ★★★★★
() автор топика
Ответ на: комментарий от LightDiver

Я вчера замучился эксперементировать и логи читать.

Дело в том что /home/* создает массив исключений в одно вложение и чтобы выбить из него что то ниже нужно разрешить только это слово.

Т.е. после этого ты должен написать: !/home/user1

А чтобы дальше другое не попало: /home/user1/*

А потом дальше включить: !/home/user1/data1

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

mx__ ★★★★★
() автор топика
Ответ на: комментарий от mx__

Ой да ну их нахрен. Норкоманы.

Я поэкспериментировал - все через жопу, да.

Разрешить рекурсивно можно, запретить тоже. Тонкие настройки только вручную.

LightDiver ★★★★★
()

Хм. А синтаксис gitignore точно делал адекватный человек?

Адекватный человек не станет придумывать себе такую «задачу», как ты описал. Даже без вложенного дерева, просто «игнорировать директорию кроме одного файла» это уже что-то сомнительное.

firkax ★★★★★
()
Ответ на: комментарий от firkax

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

Ну ладно, без проблем.

Как мне заархивировать в restic 3 директории в доме (у каждой вложение примерно в 10) c несколькими директориями в самом доме в одном снапе?

mx__ ★★★★★
() автор топика
Ответ на: комментарий от mx__

Ты кажется не понял что я имел ввиду. Дебильный тут не синтаксис а задача «игнорировать всё кроме исключений». Если у тебя она возникла - задумайся о реогранизации файлового дерева в нормальный вид.

restic

3 директории в доме

директориями в самом доме в одном снапе?

Не знаю о чём речь, видимо это локальный жаргон этой проги которую я не видел. Если в результате этих пожеланий возникает «брать один файл из дерева и игнорить остальное» то см. выше.

firkax ★★★★★
()
Ответ на: комментарий от firkax

этой проги которую я не видел.

Странно судить и давать в замечания в теме где вообще не разбираешься, мне сложно это понять.

mx__ ★★★★★
() автор топика
Ответ на: комментарий от mx__

Объясняю, вот к примеру есть дира: /home
Нужно в ней все пропустить и оставить только диру внутри: /home/user1/data1/data2/data3/data4/data5/data6

Указать /home/user1/data1/data2/data3/data4/data5/data6 в качестве корневой для работы там нельзя? Зачем к /home привязываться вообще если сама по себе она не нужна?

firkax ★★★★★
()
Ответ на: комментарий от firkax

Потому что в документации к restic написано что его файл exlude полностью 1 в 1 с файлом gitignore и работает по тем же правилам.

В интернете же полно народу кто ставят подобную задачу перед git и получают такие вот ответы.

mx__ ★★★★★
() автор топика
Ответ на: комментарий от firkax

backup делается с указанием директории что бекапить, и это получается отдельный snapshoot. Если указать разные то будут разные snapshoot.

просто хотелось в одном снапе архивировать те файлы и директории по выбору, которые находят все в одной дире:

к примеру снап: /home/user1

А в нем только:

/home/user1/Documents
/home/user1/Download
(это делается нормально)

и

/home/user1/**/data20
/home/user2/**/data30
(это уже делается через ж)

Из того что у gitignore вот такой синтаксис.

mx__ ★★★★★
() автор топика
Последнее исправление: mx__ (всего исправлений: 1)
Ответ на: комментарий от mx__

Ну значит это недоработка restic, что ему нельзя в один снапшот указать несколько рут-путей для сохранения. Ты её пытался решить жуткими костылями к файлу исключений (который предназначен совсем не для этого), закономерно получилось что-то страшное.

к примеру снап: /home/user1
А в нем только:
/home/user1/Documents
/home/user1/Download
(это делается нормально)

Если ты про

/home/user1/*
!/home/user1/Documents
!/home/user1/Download
то это НЕ нормально. Это точно такой же костыль, просто ещё не разросшийся до заметных размеров.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от firkax

Тут согласен. Ну так это придумали в gitignore, причем в самом git. Поэтому я и вон @LightDiver считаем те кто это придумал - неадекватными людьми.

https://git-scm.com/docs/gitignore

An optional prefix "!" which negates the pattern; any matching file excluded by a previous pattern will become included again. It is not possible to re-include a file if a parent directory of that file is excluded. Git doesn’t list excluded directories for performance reasons, so any patterns on contained files have no effect, no matter where they are defined. Put a backslash ("\") in front of the first "!" for patterns that begin with a literal "!", for example, "\!important!.txt".
mx__ ★★★★★
() автор топика
Последнее исправление: mx__ (всего исправлений: 1)
Ответ на: комментарий от mx__

Нет, gitignore тут ни при чём. Это файл для списка исключений, когда дерево, начиная с какого-то базового пути, в целом нужно, но отдельные его части надо исключить. Задачу «включить один файл из глубины а всё остальное игнорить» они решать и не собирались. По-хорошему в бекапилку должен передаваться список путей для бекапа и список исключений из бекапа - это разные списки. Может быть их и можно объединить в общий файл, но не в виде «игнорировать всё кроме» а в виде специальной записи о добавлении пути в бекап.

В контексте гита (системы контроля версий) это всё точно не нужно, у рабочей копии репозитория есть вполне конкретный базовый путь всегда. Даже имеющийся синтаксис с восклицательным знаком, на мой взгляд, там лишний, скорее всего его добавили туда по просьбе какого-то костыльщика.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 2)
Ответ на: комментарий от firkax

скорее всего его добавили туда по просьбе какого-то костыльщика.

Кто его туда добавил, можно выяснить, а вот сам придумал ипи кто запинал это уже другой вопрос. Для меня главное что ЭТО туда добавили, а значит кто добавлял тоже не совсем адекватный ;)

mx__ ★★★★★
() автор топика
Последнее исправление: mx__ (всего исправлений: 1)
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.