Контроль версій для співпраці (з різними рівнями слів)?


20

Більшість паперів зараз написані спільно, а співробітники часто розташовані в різних місцях. Я завжди використовував системи управління версіями для своїх документів і коду, а також вважав, що контроль версій є критичним для спільних програмних програм, але, здається, багато дослідників теоретично уникають їх використання для написання спільних робіт. Щоб переконати моїх співробітників у тому, що контроль над версіями (контроль редакції) є хорошою ідеєю для спільної роботи, мабуть, є деякі передумови. Неможливо змусити всіх турбуватися про певний набір умов для розривів рядків та абзаців, або уникати переходів у вкладках та пробілах.

Хтось пропонує безкоштовне розміщення невеликих сховищ документів із спільним текстовим документом, керування версіями, яке може працювати з різними рівнями ( не на основі рядків)?

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

Я думав про Git, Subversion, Mercurial, darcs або Bazaar, створені для обробки відмінностей на рівні слова за допомогою wdiff, а також простий спосіб налаштування доступу, захищеного відкритими ключами (наприклад, через ssh). Однак жоден із постачальників контролю версій, на який я дивився, здається, не пропонує нічого подібного. Для наукової співпраці особливості «підприємства», на які підкреслюють багато компаній, не дуже важливі (велика кількість галузей, інтеграція з trac, аудит третіми сторонами, ієрархічні проектні команди). Але різниця на рівні слів здається критичною, але не підтримується. На мій досвід, коли текстові файли відрізняються на рівні рядків, кожен повинен уникати переформатування абзаців та редакторів, які змінюють вкладки на пробіли або навпаки створюють проблеми; також здається, що існує багато помилкових конфліктів із редакцією.

Дивіться відповідне запитання в MO про інструменти співпраці та пов'язані запитання на TeX.SE, про контроль версій для документів LaTeX та пакети LaTeX для контролю версій . Дивіться також Таблицю огляду порівняння хостингу SVN для великого списку хостинг-провайдерів лише для однієї з основних систем управління версіями.


Редагувати: Відповідь Юкки Суомели на питання TeX.SE " Найкращі інструменти для розбиття та злиття для підриву LaTeX ", здається, є найкращою пропозицією на даний момент, яка висвітлює, як інтерпретувати дельти на рівні слів. Крім того, Jukka пояснив, як відмінності між послідовними версіями на кінці сховища відокремлюються від відмінностей на рівні користувача, які використовуються для виявлення конфліктів та об'єднання змін. Відповідь Юкки на TeX.SE явно виключає одночасне редагування та об'єднання, покладаючись на традиційний атомарний маркер редагування, щоб уникнути конфліктів редагування. Уточнюючи (і змінюючи) моє оригінальне запитання, чи є спосіб забезпечити вирішення конфліктів редагування на основі різниці слів, а не на основі різниці рядків? Іншими словами, можеwdiffчи подібні інструменти інтегруються в частину засобів виявлення конфліктів інструментів контролю версій, подібно до того, як можна ігнорувати кінцеві рядкові відмінності та відмінності у пробілі?


3
Я не зовсім розумію питання. Наприклад, у SVN різниці, що відображаються користувачеві, генеруються клієнтом, і це залежить від вашого клієнта SVN (та його конфігурації), отримаєте ви на базі слів diff або на основі рядків. Компанія, яка розміщує ваше сховище SVN, на це зовсім не впливає.
Jukka Suomela

2
@suresh Якщо ви редагуєте (письмові) текстові документи, часто доводиться болісно сканувати цілий рядок, щоб побачити, що хтось змінив одну кому. Правильна поведінка зазвичай полягає в тому, щоб показати мінімальну одиницю змін. Або врахуйте поведінку, якщо хтось не використовує розриви рядків. Тоді зміна одного слова призведе до того, що весь абзац відобразиться в розрізі для вас, щоб знайти крихітні зміни.
Марк Рейтблат

2
Я не використовую жорсткі перерви для обертання ліній. У моєму вихідному коді Латексу фізичний рядок тексту зазвичай є повним абзацом тексту. Редактор може передати слово для відображення, залежно від поточної ширини вікна. Це дуже спрощує речі; ніколи не потрібно хвилюватися щодо таких речей, як я повинен переписати слово абзац або домовитись про "правильну" ширину рядка з вашими співавторами. Однак вам знадобиться різний інструмент на рівні слів, щоб швидко побачити зміни.
Jukka Suomela

2
@Andras Моя думка полягала в тому, що системі ВК потрібно лише мати можливість реконструювати дві версії на стороні клієнта, і не дивно, що всі системи ЦК можуть це зробити. Тоді вам потрібна утиліта тристороннього злиття на рівні слова, але я не знаю жодної. (Наприклад, TortoiseMerge та kdiff3 обидва на основі рядків.) Коли ви маєте таку утиліту, то будь-яка система ВК, яка дозволяє вказати зовнішню утиліту об'єднання, буде достатньо. (Сюди входять svn, bzr, git, hg ...)
Maverick Woo

3
Одне джерело плутанини тут полягає в тому, що існує вбудований алгоритм бінарного диференціалу (який працює на рівні окремих байтів), який використовується SVN для зв'язку між сервером і клієнтом, а також внутрішньо сервером для збереження сховища компактний. Це просто оптимізація; він не видно користувачеві, і той самий алгоритм бінарного розгляду може бути застосований до будь-якого файлу. Усі видимі користувачеві речі (розбірливі, людські, розбірливі, злиття, вирішення конфліктів ...) відбуваються на стороні клієнта.
Jukka Suomela

Відповіді:


11

Я використовував git для співпраці над деякими документами, написаними в латексе. Вам доведеться дотримуватися деяких правил:

  • Почніть кожне речення з нового рядка, латекс ігнорує ці нові рядки, поки немає порожнього рядка
  • Використовуйте таку ж конфігурацію для форматування (вкладка / пробіли / максимальна ширина тексту)
  • Для найкращих результатів створіть .gitattributes файл у вашому сховищі та додайте рядок *.tex diff=tex. Це робить відмінним усвідомлення синтаксису tex і призводить до більш значущого результату.

Потім ви можете використовувати git diff --color-wordsта gitk --color-wordsбачити відмінності у словах (також дивіться цю статтю Слово за словом відрізняється в Git про те, як налаштувати git завжди використовувати алгоритм word-diff для відображення журналу git diff / git).

Щоб зменшити об'єднання вручну, я можу рекомендувати використовувати окремі файли для розділів та підрозділів (залежно від розміру вашого документа).


Я розглядаю, як це зробити для власних документів, це здається простим способом досягнення більшості моїх цілей. Але не всі прагнуть так працювати ...
Андраш Саламон

2
Для людей, які вагаються працювати таким чином, ви можете використовувати TortoiseGit, якщо їм не подобається командний рядок git. Якщо мова йде про кожне речення в новій частині рядка, а поки не примусово застосовується максимальна ширина тексту, це не так важливо. (Я працював над деякими проектами без цього правила)
Деві Лендман

В цілому я згоден, що git - це хороший вибір. Але чому окремі файли для (під) розділів можуть зменшити кількість ручних об'єднань? Мені також цікаво, як допомагає започаткування кожного речення з нового рядка (іноді речення змішуються в процесі редагування).
dd1

щодо розділювальних файлів: на той час я не розумів точних деталей злиття git, так що насправді непотрібно, але все ж доцільно з інших причин. Присуд у новому рядку дуже важливий, оскільки більшість інструментів навколо git завжди показують зміни рядків; якщо ви використовуєте іншу стратегію, скажімо, нехай редактор робить рядкові перерви, кожен раз, коли хтось змінює 1 слово в абзаці, вам доведеться полювати це сталося, а в разі автоматичного злиття: ніяк.
Деві Лендман

4

2
На жаль, "найкращі практики" в цих документах - саме такі речі, які не можна примусити співробітників.
Андраш Саламон

4

Я дуже хочу наголосити наголосити іншим і пропоную вам сісти і розробити приємну стратегію SVN. Я використовую SVN для розміщення всієї своєї "дослідницької" структури:

  • Управління довідками JabRef
  • Завантажені PDF-файли
  • Статті

Це чудово, адже воно містить усе, і, звичайно, дає історію. Застереження, що вам потрібен власний сервер. Але якщо у вас є якась існуюча машина Windows (або все, що вам зручніше), ви можете встановити її просто через VisualSVN Server . Потім ви створюєте відповідні облікові записи для співпрацівників і надаєте їм доступ до відповідної області (тобто, можливо, для читання-доступу до вашого файлу bibtex JabRef, і читаєте / записуєте до спільної області статті "в процесі роботи").

TortiseSVN можна використовувати як клієнт Windows для взаємодії з SVN. Вам потрібно бути обережним щодо переміщення / видалення файлів і копіювання папок (SVN зберігатиме метадані всередині прихованих папок у кожній з ваших папок, тому вам потрібно виконати команду видалення з SVN, щоб позбутися від неї, потрібно трохи звикнути до, але варто інвестувати).

Потім, працюючи з співавтором, вони, очевидно, також повинні використовувати SVN. Але, знову ж таки, вкладення коштів у навчання не варто. І, подумавши, ви також можете мати його, щоб мати доступ лише до читання до їхнього файлу jabref (можливо, через "зовнішній" об'єкт у svn).

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

Дуже рекомендую. Чим більше людей, які створюють власні SVN, тим краще, оскільки це лише покращить варіанти співпраці в майбутньому (хоча, звичайно, було б корисно, якби, можливо, існував «стандартний» спосіб створення наукового сховища).

- Редагувати: Infact, я написав тут таку пропозицію: Стратегія наукової співпраці з LaTeX та SVN . Він пропонує скористатися функцією svn externals для легкої співпраці між людьми з подібними налаштуваннями. Повідомте мене, чи потрібно її змінити чи це просто не підходить.


4

Читаючи ваш чудовий пост і оглядаючи рішення, я натрапив на можливість розфарбувати зміни на рівні слів у gitk . Параметр gitk, здається, є новою та / або недокументованою функцією, оскільки автоматичне завершення не пропонує його, а сторінка man gitk не перелічує його.
Ось варіанти, які я знайшов:

gitk --word-diff=plain
gitk --word-diff=porcelain
gitk --word-diff=color

Ви можете знайти декілька дискусій на цю тему, шукаючи gitk "diff --color-words" .

Редагувати:
Ось так виглядає ...

Відмінності кольорові на рівні слів за допомогою gitk


1

Я дуже добре розумію проблему. Я почав використовувати Калейдоскоп для розладів з git. Це лише Mac, але його порівняння працюють краще, ніж wdiff, а також він має інтерфейс та оновлення в реальному часі.


2
Мені здається, що калейдоскоп - це лише інструмент різниці на основі ліній, який, крім того, висвітлює зміни всередині кожного рядка. Це не заміна для wdiff та друзів. Калейдоскоп видає нечитабельні розрізнення, якщо ви, наприклад, просто взяти абзац тексту та змінити деякі перерви рядків. Інструменти на основі Wdiff просто ігнорують зміни в розривах рядків.
Jukka Suomela
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.