Письменництво з Git

Протягом певного часу я застосовую т.зв. керування версіями до текстів. Це дає мені можливість:

  1. бачити зміни, які я зробив відносно останньої «зафіксованої» версії файлу;
  2. порівнювати між собою будь-які з раніших версій файлу;
  3. паралельно працювати над кількома варіянтами того ж файлу, які відрізняються у певних місцях, але мають значну частину спільного тексту; тобто спробувати, наприклад, переробити певний розділ і подивитись «що із того вийде», залишивши стару версію цього розділу доступною до повернення в документ навіть після будь-якого редагування инших розділів;
  4. синхронізувати версію одного файлу із версією другого (наприклад, текст із ілюстрацією);
  5. відіслати комусь документ для редагування й переглянути усі корекції при отриманні; обирати, яку корекцію прийняти, а яку ні.

Це далеко не вичерпний перелік. Як це працює? У вас є тека з файлами, а всередині цієї теки є під-тека .git, де зберігаються попередні версії файлів та інформація про послідовність та зв’язок між змінами. Єдина вимога — навчити вашу систему керування версіями порівнювати різні версії файлів того формату, в якому ви пишете ваш текст.

Продовжити читання «Письменництво з Git»

Git annex: розподілене зберігання великих файлів

Хочу познайомити вас із дивовижним знаряддям на ім’я git-annex. Зацитую український Вікіпідручник програми:

«Уявімо, що у вас є переносний компутор з невеликим вінчестером. Також у вас є стаціонарний компутор, на який і з якого ви можете пересувати через мережу файли. Ви працюєте, і в певний момент вам бракне місця на переносному компуторі — й ви пересуваєте частину файлів на стаціонарний. А ще частину — на зовнішній вінчестер. І ви опиняєтесь в становищі, коли ваші дані розпорошені між трьома різними пристроями.

Чи не чудово було б, якби в кожен такий момент ви могли продовжувати бачити перелік усіх ваших файлів, а також мали можливість легко отримати будь-який з них, не шукаючи перед тим півдня, на якому пристрої ви його розмістили? І якщо вам треба «розчистити» місце для отримання інших файлів, бути певними, що ви не вилучите файли, яких більше ніде немає? І ще: якщо ви змінюєте, переміщуєте чи перейменовуєте файли на одному з ваших пристроїв, щоб ці самі зміни автоматично відтворювались і на решті ваших пристроїв, на які ви скопіювали свої файли? Ви, мабуть, довго мріяли про таку можливість, чи не так?»

Git-annex забезпечує вам такі можливості. Огляд та приклади використання програми можна прочитати у Вікіпідручнику (який можна також редагувати й доповнювати), тому дублювати їх тут немає сенсу. Скажу тільки, що якщо система керування версіями git є дуже вдалим інструментом для роботи з кодом програм та текстовими документами, то git-annex (який, як ви, мабуть, здогадались, працює на основі git) — настільки ж вдалим знаряддям для синхронізації та розподіленого зберігання великих об’ємів даних між різними присторями. Git-annex, на відміну від простого git, не зберігає повної історії кожного файлу, завдяки чому добре пасує до зберігання великих бінарних файлів, як то звукові чи відео-записи. Крім того, програма дає можливість мати в репозиторії тільки частину повного набору його файлів, а решту зберігати в инших репозиторіях-клонах.

Тобто зберігання самих даних відділене від зберігання структури тек та історії дій. При тім, git-annex дбає, щоб кожен файл зберігався хоча б в одному з репозиторіїв-клонів. Таким чином ваші дані є упорядкованими незалежно від того, на скількох пристроях вони зберігаються.

Якщо вас зацікавила програма, її Вікіпідручник допоможе ознайомитись із нею глибше.

git та українські назви файлів

Якщо git status показує українські назви файлів як «"\320\277\321..."», спробуйте запустити комадну git config --global core.quotepath off. (Запозичено з http://stackoverflow.com/a/5855213/1142039).