Блокировка двоичных файлов с помощью системы контроля версий git

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

Чтобы добиться эффекта блокировки, необходимо определить «центральное» хранилище. Независимо от распределенной природы git, у большинства компаний будет «центральный» репозиторий для программного проекта. Мы должны иметь возможность пометить файл как требующий блокировки из управляющего репозитория git по указанному адресу. Возможно, это затруднено из-за того, что git отслеживает содержимое файлов, а не файлы?

Есть ли у кого-нибудь из вас опыт работы с git и двоичными файлами, которые необходимо заблокировать перед изменением?

ПРИМЕЧАНИЕ. Похоже, новый проект распределенного контроля версий Source Gear с открытым исходным кодом, Veracity, имеет блокировку в качестве одной из своих целей.


person Mario    schedule 23.09.2008    source источник


Ответы (17)


В Git LFS 2.0 добавлена ​​поддержка блокировки файлов.

С Git LFS 2.0.0 теперь вы можете блокировать файлы, над которыми вы активно работаете, не позволяя другим пользователям отправлять их на сервер Git LFS, пока вы снова не разблокируете файлы.

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

person osowskit    schedule 26.04.2017

В Subversion есть блокировки, и они не только рекомендательные. Они могут быть принудительно применены с помощью атрибута svn:needs-lock (но также могут быть намеренно нарушены при необходимости). Это правильное решение для управления файлами, не подлежащими слиянию. Компания, в которой я работаю, хранит практически все, что есть в Subversion, и использует svn:needs-lock для всех файлов, не подлежащих объединению.

Я не согласен с тем, что «замки - это просто способ общения». Это гораздо более эффективный метод, чем push-уведомления, например, по телефону или электронной почте. Блокировки Subversion самодокументируются (у кого есть блокировка). С другой стороны, если вам нужно общаться с помощью других традиционных каналов push-уведомлений, таких как электронная почта, кому вы отправляете уведомление? Вы не знаете заранее, кто может захотеть отредактировать файл, особенно в проектах с открытым исходным кодом, если у вас нет полного списка всей вашей команды разработчиков. Так что эти традиционные методы общения далеко не так эффективны.

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

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

Вот интересное чтение по этой теме.

person Craig McQueen    schedule 13.06.2009
comment
Абсолютно верно. Система DVCS не предназначена для централизованного управления. Однако возможно построить централизованно управляемую систему поверх DVCS, которая даст вам мощность, которую может предоставить большинство DVCS, а также центральное управление, необходимое в некоторых ситуациях. - person Michael Johnson; 09.06.2010
comment
Я понимаю, что этот вопрос немного урезан, но голосование как блокировка принципиально не имеет смысла при DVCS. Вместо этого вам следует взглянуть на что-то вроде рабочего процесса «Диктатор и лейтенанты» git- scm.com/book/en/Distributed-Git-Distributed-Workflows - person Aaron Newton; 15.01.2013

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

  • Имейте способ пометить файл как «need-lock» (например, свойство «svn: needs-lock»).
  • При оформлении заказа git пометит такой файл как доступный только для чтения.
  • Новая команда git-lock свяжется с запущенным где-то сервером центрального замка и попросит разрешения на блокировку.
  • Если сервер блокировки предоставляет разрешение, отметьте файл для чтения и записи.
  • git-add сообщит серверу блокировки хэш содержимого заблокированного файла.
  • Сервер блокировки будет следить за тем, чтобы этот хэш содержимого появился в фиксации в главном репозитории.
  • Когда появится хеш, снимите блокировку.

Это в значительной степени недоработанная идея, и везде есть потенциальные дыры. Это также противоречит духу git, но определенно может быть полезно в некоторых контекстах.

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

person Greg Hewgill    schedule 23.09.2008
comment
Самая большая проблема, которую я вижу, заключается в том, что git полностью предназначен для работы в автономном режиме. Хотя, как вы говорите, для реализации этого можно использовать собственные сценарии сборки. Помимо этого, у меня возникнет соблазн создать ветвь «блокировки», которую можно нажимать и извлекать с пульта дистанционного управления. Все, что у него есть, это таблица блокировок, заменяющая сервер блокировок. - person Michael Johnson; 26.09.2008
comment
@MichaelJohnson: Вы также можете просто иметь файлы .lock- ‹filename› в своей основной ветке. Таким образом, вы могли редактировать и разблокировать с помощью одной фиксации. - person thejh; 09.02.2013

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

Это действительно потенциальная проблема. Итак, Алиса заканчивает первой и переходит к центральной alice/update ветви. Обычно, когда это происходит, Алиса объявляет, что его следует пересмотреть. Боб видит это и просматривает. Он может либо (1) самостоятельно включить эти изменения в свою версию (переход от alice/update и внесение в нее своих изменений), либо (2) опубликовать свои собственные изменения в bob/update. Он снова делает объявление.

Теперь, если вместо этого Алиса нажимает master, у Боба возникает дилемма, когда он извлекает master и пытается слиться со своей локальной ветвью. Его конфликты с Алисой. Но опять же, может применяться одна и та же процедура, только в разных ветвях. И даже если Боб игнорирует все предупреждения и фиксирует фиксацию вместо фиксации Алисы, всегда можно вытащить фиксацию Алисы, чтобы исправить ситуацию. Это становится просто проблемой общения.

Поскольку (AFAIK) блокировки Subversion носят рекомендательный характер, электронная почта или мгновенное сообщение могут служить той же цели. Но даже если вы этого не сделаете, Git позволит вам это исправить.

Нет, как такового механизма блокировки нет. Но запорный механизм обычно просто заменяет хорошее общение. Я считаю, что именно поэтому разработчики Git не добавили механизм блокировки.

person Michael Johnson    schedule 26.09.2008
comment
Любая система управления версиями - лучший способ общения между разработчиками, потому что она структурирована. Электронная почта, чат или телефон хуже, потому что они не структурированы. Поэтому, когда люди говорят, что они будут использовать электронную почту, чат или телефон вместо использования scm, это неправильно. Сохранение исходного кода и организация взаимодействия между разработчиками - это две части любой SCM, и git решает только одну часть, когда svn решает обе. - person alpav; 06.01.2010
comment
На мой взгляд, важным моментом является то, что заблокированный файл на диске доступен только для чтения, а разблокированный файл - это RW. Это означает, что когда кто-то пытается отредактировать заблокированный файл, его редактор, по крайней мере, предупредит его, что это файл RO. На этом этапе им предлагается связаться с тем, кто заблокировал файл, чтобы узнать, являются ли их изменения избыточными, дополнительными или несовместимыми. Без VCS, изменяющего права доступа к файлам, пользователю не предлагается автоматически общаться, и это остается на усмотрение его ошибочной памяти и процедур. - person KeyserSoze; 05.05.2010
comment
@keysersoze: Но суть DVCS (например, git) в том, что каждый волен вносить изменения по своему усмотрению. Так что любая блокировка должна быть только рекомендательной. Вам нужна централизованно управляемая VCS (Perforce, TFS). Я не думаю, что DVCS созданы для того, чтобы делать то, что вы ищете. - person Michael Johnson; 09.06.2010
comment
Типичный ответ git - это проблема связи, поэтому он не имеет ничего общего с git не понимает, что блокировка является эффективной сообщением о намерении быть единственным человеком, работающим с файлом в данный момент - большинство вероятно, потому что это сложный двоичный файл, который очень сложно (невозможно) объединить. Это вполне обоснованное и разумное требование для большой команды, работающей над бинарными активами. По крайней мере, была бы очень полезна возможность заблокировать файл в названной ветке. Это сообщение может распространяться до происхождения, происхождения и т. Д. - person Matt Connolly; 09.12.2010
comment
Полностью согласен с alpav и Мэттом Коннолли - ожидать, что разработчики / дизайнеры и т. Д. Будут сообщать о контроле версий ВНЕ системы контроля версий, чтобы заставить процесс контроля версий работать, смешно. Алиса, увидев, что Боб заблокировал файл, а затем отправила ему электронное письмо с вопросом, почему / когда он будет разблокирован, является гораздо более эффективной формой общения. - person Max Williams; 16.09.2011
comment
Эта идея работает, когда вы управляете овцами, которые будут следовать за вами и вежливо вам подчиняться, но не когда вы управляете группой диких кошек. в какой-то момент вам понадобится какой-то контроль над вашим кодом. - person Krishna Prasad Varma; 28.03.2012
comment
Даже при хорошем общении у меня нет возможности напомнить себе (в инструменте), что, возможно, вам следует избегать поверхностных изменений в этом файле, пока Алиса не внесет свои основные изменения. Я бы хотел иметь возможность добавлять к файлам бессмысленный флаг (который я могу интерпретировать как угодно). - person bshirley; 30.05.2012
comment
-1 Это не ответ на вопрос. (Неявная) идея в вопросе состоит в том, чтобы заблокировать файлы, чтобы другие знали, что вы работаете с файлом , прежде чем они его редактируют. Вы описываете стандартное разрешение конфликтов git, которое, хотя и очень полезно, работает только после возникновения конфликта. - person sleske; 21.09.2012
comment
Итак ... в проекте DVCS со 100 пользователями, с большинством из которых я не обязательно работаю, кому я могу отправить электронное письмо, если мне нужен эксклюзивный доступ к двоичному файлу? - person iheanyi; 12.03.2014
comment
-1: не всегда возможно или практично достичь всех потенциальных модификаторов с помощью других форм коммуникации, кроме блокировки. Прости, мерзавец, нет оправдания :-) - person gatinueta; 26.03.2014

Мы только недавно начали использовать Git (ранее использовали Subversion), и я нашел изменение в рабочем процессе, которое может помочь в решении вашей проблемы без необходимости блокировок. Он использует то, как разработан git и насколько легки ветки.

По сути, это сводится к отправке в неосновную ветвь, выполнению обзора этой ветки и последующему слиянию с главной ветвью (или какой бы ни была целевая ветвь).

В соответствии с тем, как git «предназначен» для использования, каждый разработчик публикует свой собственный публичный репозиторий, из которого они просят других извлечь данные. Я обнаружил, что у пользователей Subversion с этим возникают проблемы. Поэтому вместо этого мы нажимаем на ветвления в центральном репозитории, при этом у каждого пользователя есть свое собственное дерево ветвей. Например, может работать такая иерархия:

users/a/feature1
users/a/feature2
users/b/feature3
teams/d/featurey

Не стесняйтесь использовать свою собственную структуру. Обратите внимание, что я также показываю тематические ветки, еще одну распространенную идиому git.

Затем в локальном репо для пользователя a:

feature1
feature2

И чтобы передать его на центральный сервер (origin):

git push origin feature1:users/a/feature1

(это, вероятно, можно упростить с помощью изменений конфигурации)

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

git checkout master
git pull
git merge users/name/feature1
git push

При извлечении выполняется выборка (извлечение любых новых основных изменений и ветки функций), а в качестве мастера обновлений выполняется выборка того, что есть в центральном репозитории. Если пользователь a выполнил свою работу и правильно отследил мастер, проблем со слиянием возникнуть не должно.

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

Вы также можете программно реализовать аспекты этого с помощью git-хуков, но, опять же, я еще не работал с ними, поэтому не могу говорить о них.

person Michael Johnson    schedule 24.09.2008
comment
Микроволновая печь не предназначена для нагрева пищи. Вы говорите мне, поскольку git изначально не был разработан для моего рабочего процесса (и рабочего процесса многих людей), я не должен использовать git в качестве DVCS? Вы понимаете, что запрос на вытягивание был предназначен для создания уровней разработчиков, которые имели разные уровни полномочий / доверия к проекту. Многие из нас работают над проектами, в которых большинство инженеров имеют одинаковые полномочия, а инженеров относительно мало, поэтому работа, которую выполняет каждый человек, имеет решающее значение для всего и не может откладываться на неопределенный срок. - person iheanyi; 12.03.2014
comment
@iheanyi Рабочий процесс запроса на вытягивание хорошо работает с типом команды, которую вы описываете (обычно любому разработчику разрешается объединять запросы на включение других пользователей). - person Marnen Laibow-Koser; 15.06.2018
comment
@ MarnenLaibow-Koser совсем нет. То, что вы описали, меняет рабочий процесс. Теперь у меня есть слияние чужих изменений, в отличие от того, чтобы каждый отвечал за свое слияние. - person iheanyi; 15.06.2018
comment
@iheanyi Это преимущество. Идея состоит в том, что никто не объединяет свои собственные изменения в мастер, чтобы убедиться, что кто-то другой знает о них и одобряет их. И это не меняет рабочий процесс: вы по-прежнему объединяете запросы на вытягивание в мастер, а не в свою ветку. • Но в любом случае это также не обязательно для работы с Git. Вы абсолютно могли бы создать рабочий процесс ветки функции в Git, где каждый объединяет свои изменения и поэтому нет запросов на вытягивание. Я бы не советовал, но Git прекрасно это поддерживает. - person Marnen Laibow-Koser; 15.06.2018
comment
@ MarnenLaibow-Koser приносит пользу одним, но не другим. Я начинаю повторяться. - person iheanyi; 19.06.2018
comment
@iheanyi Если вы не думаете, что больше внимания уделять коду (в разумных пределах), как правило, является преимуществом, я тоже не знаю, что сказать. :) - person Marnen Laibow-Koser; 22.06.2018
comment
@ MarnenLaibow-Koser Если бы я тратил все свое время на изучение кода, я бы никогда не написал код. . . - person iheanyi; 22.06.2018
comment
@iheanyi Проверка кода - это фундаментальная часть разработки, а не отвлечение от нее. Написание кода - не единственное и, возможно, даже не самое важное, чем мы должны заниматься как разработчики. Но я думаю, что мы теряем здесь главную тему. :) - person Marnen Laibow-Koser; 22.06.2018
comment
@ MarnenLaibow-Koser, действительно, моя первоначальная точка зрения заключалась в том, что мы не должны позволять себе ограничиваться использованием git в зависимости от того, как он был предназначен при первоначальной разработке и использовался в другой способ не обязательно является неоптимальным - это действительно зависит от вашего рабочего процесса / команды. - person iheanyi; 23.06.2018

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

person Khoth    schedule 23.09.2008

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

person Mario    schedule 26.09.2008

Когда я использовал Subversion, я неукоснительно устанавливал свойство svn:needs-lock для всех двоичных и даже трудно редактируемых текстовых файлов. Я никогда не сталкивался с какими-либо конфликтами.

Теперь, в Git, я не беспокоюсь о таких вещах. Помните: блокировки в Subversion на самом деле не являются обязательными блокировками, это просто инструменты связи. И угадайте, что: мне не нужна Subversion для общения, я прекрасно справляюсь с электронной почтой, телефоном и мгновенными сообщениями.

Еще я сделал замену многих двоичных форматов на форматы простого текста. Я использую reStructuredText или LaΤ вместо Word, CSV вместо Excel, ASCII-Art вместо Visio, YAML вместо баз данных, SVG вместо OO Draw, abc вместо MIDI и так далее.

person Jörg W Mittag    schedule 23.09.2008
comment
Я думал, что вы настроены серьезно, пока не прочитал ASCII-Art для Visio: / (Может быть. Какой инструмент вы используете для замены Visio, кроме старого доброго Vi?) - person kizzx2; 30.11.2010
comment
@ kizzx2: основной инструмент, который я использую, - это хороший язык программирования, который достаточно читабелен, поэтому мне не нужны сложные диаграммы, чтобы понять, что происходит в WTF. Что еще важнее, я стараюсь писать читаемый код. Хорошая IDE, которая может выводить диаграммы из кода, вместо того, чтобы мне приходилось поддерживать их отдельно вручную. Для простых диаграмм UML я могу использовать что-то вроде yUML, который поддерживает диаграммы классов, действий и вариантов использования. Для простых графиков я использую Diagrammr, который строит графики из простых предложений и GraphViz для сложных графиков. - person Jörg W Mittag; 30.11.2010
comment
Diagrammr кажется действительно интересным! Спасибо! - person kizzx2; 01.12.2010
comment
Собственно замена на текстовый формат не решает проблемы. Некоторые двоичные файлы (например, чистые растровые изображения) можно легко объединить. Дело во внутренней структуре и зависимости. Если у вас есть какой-либо XML-файл, который зависит от ссылки для других внутренних узлов и требует целостности этой связи, его нельзя объединить. Обычно в большинстве сложных форматов данных используется такая внутренняя связь, как в графической базе данных. - person eonil; 28.11.2011
comment
Эквивалент yUML с открытым исходным кодом - Plant UML - person Mystic; 17.02.2012
comment
@ JörgWMittag Итак, вы перешли на текстовые файлы. Повезло тебе. А как насчет остальных из нас, кто работает над тем, где это невозможно? А как насчет тех из нас, кто действительно сталкивался с конфликтами с двоичными файлами, когда svn: needs-lock не был установлен? - person iheanyi; 12.03.2014

Я бы не ожидал, что блокировка файлов когда-либо станет функцией в git. Какие двоичные файлы вас интересуют в первую очередь? Вы действительно заинтересованы в блокировке файлов или просто в предотвращении конфликтов, вызванных невозможностью их объединить?

Кажется, я помню, как кто-то говорил (или даже реализовывал) поддержку слияния документов OpenOffice в git.

person JesperE    schedule 23.09.2008
comment
Да, Git поддерживает настраиваемые драйверы слияния для разных типов файлов. - person Marnen Laibow-Koser; 29.01.2021

Это не решение, а скорее комментарий о том, зачем нужны механизмы блокировки. В некоторых областях используются некоторые инструменты, которые используют только двоичные форматы, которые являются критически важными, и «использовать лучшие / другие инструменты» просто не вариант. Нет альтернативных жизнеспособных инструментов. Те, с которыми я знаком, действительно не были бы кандидатами на слияние, даже если бы вы сохранили ту же информацию в формате ascii. Я слышал одно возражение: вы хотите работать в автономном режиме. Конкретный инструмент, о котором я думаю, действительно не работает в автономном режиме из-за необходимости извлекать лицензии, поэтому, если у меня есть данные на ноутбуке, я все равно не смогу запустить инструмент в поезде. Тем не менее, что предоставляет git, если у меня медленное соединение, я могу получать лицензии, а также снимать изменения, но иметь быструю локальную копию для просмотра разных версий. Это хорошая вещь, которую DVCS дает вам даже в этом случае.

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

Подход типа «консультативная блокировка по электронной почте» действительно воняет. Я видел это и устал от бесконечного потока писем «Я редактирую это», «Я закончил редактирование» и видел, как изменения были потеряны из-за этого. Частный случай, о котором я думаю, был таким, когда коллекция небольших файлов ascii была бы намного лучше, но это отступление.

person Dan    schedule 07.10.2016
comment
Голосование против. Использование двоичных файлов не требует блокировки. Git даже поддерживает настраиваемые драйверы слияния для двоичных файлов (ну, для любого файла); во всяком случае, есть github.com/synapsepd/bump-merge. - person Marnen Laibow-Koser; 29.01.2021

А как насчет файлов cad? Если файлы не заблокированы, чтобы они также были доступны только для чтения, большинство программ CAD просто откроют их для изменения произвольных битов, которые будут отображаться как новый файл для любого vcs. Так что, на мой взгляд, блокировка - идеальное средство для сообщения о своем намерении изменить какой-либо частичный файл. Кроме того, это в первую очередь мешает некоторому программному обеспечению получить доступ для записи. Это позволяет обновлять локальные файлы без необходимости закрывать программное обеспечение или, по крайней мере, все файлы полностью.

person Community    schedule 01.09.2009
comment
Простое открытие файла изменит некоторые произвольные биты? Звучит как серьезная ошибка! - person Stein G. Strindhaug; 08.04.2011

TortoiseGit поддерживает полный рабочий процесс git для документов Office, делегируя diff самому Office. Он также работает с делегированием OpenOffice для форматов OpenDocument.

person Antonio Bardazzi    schedule 13.02.2011
comment
Облегчает ли это плавное объединение файлов Office и OpenDocument? - person Craig McQueen; 14.02.2011
comment
Хм, а что, если я работаю с каким-то другим двоичным файлом, словом, Excel, видео, каким-то файлом изображения? - person iheanyi; 12.03.2014

Я не предлагаю использовать git в моей компании для решения той же проблемы. Мы используем EA для всех наших проектов и Microsoft Word для документации, мы не знаем заранее, кто может редактировать конкретный файл, поэтому исключительная блокировка - наш единственный вариант.

person Hernan Rajchert    schedule 29.12.2009
comment
Я думаю, что лучшим долгосрочным решением было бы использование более совершенных инструментов. Хорошая вики могла бы пройти долгий путь или просто использовать что-то, что не хранит двоичные файлы (HTML, TeX и т. Д.). Блокировка - это хорошо, но кажется, что большинство людей просто хотят использовать блокировку, потому что двоичные разности трудно обрабатывать, но для большинства этих применений нет причин хранить двоичные файлы. Вы храните исходный код в git, а не в dll / sos и исполняемых файлах, так зачем хранить скомпилированные версии документов? - person semi; 25.11.2010

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

Если вашей организации требуется командная среда (обычно для того, чтобы лишить разработчиков гарантий занятости), используйте svn, git не для вас. Svn обеспечивает как контроль версий, так и обмен информацией между разработчиками о блокировках.

person alpav    schedule 06.01.2010
comment
Многие git специально разработаны для команд, это одна из областей (среди многих других), где git намного опережает SVN. В этом случае блокировка не так проста, как SVN, однако есть функции, которые могут помочь, например, слияние драйверов. - person shmish111; 09.07.2014
comment
@ shmish111: Обмен блокировками между разработчиками - важная часть командной среды, почему вы думаете, что такого рода ситуации не нужно рассматривать? Svn позволяет разработчикам сообщать о блокировках / разблокировках, а Git - нет. Git должен был сделать это необязательной, но доступной функцией. - person alpav; 14.12.2014
comment
Как я уже сказал, git слабее SVN, когда дело касается блокировки. Я сталкивался с этим требованием только один раз и, как выяснилось, в итоге нам это не понадобилось. Я бы сказал, что часто (не всегда), когда файл необходимо заблокировать, это хороший показатель того, что вы могли бы лучше организовать свой проект. Git разработан специально для командной работы, поэтому говорить, что он не для командной среды, просто безумие. Сказать, что командная среда создана для того, чтобы лишить разработчиков гарантий занятости, невероятно безумно! - person shmish111; 15.12.2014
comment
@alpav «Обмен блокировками между разработчиками - важная часть командной среды» Только в том случае, если блокировки необходимы в первую очередь. В общем, нет. (Я довольно успешно проработал без запирания 20 лет. Не понимаю, зачем мне это нужно.) - person Marnen Laibow-Koser; 23.09.2018

Просто поместите текстовый файл в cc с файлом, который вы хотите заблокировать, а затем обработчик обновления отклонит его.

person Remote Shell    schedule 04.12.2010
comment
Мне было бы интересно услышать это более подробно. - person Craig McQueen; 05.12.2010

Возможно, реорганизация проекта может помочь избежать блокировок, но:

  • Команды также организованы по другим приоритетам (местоположение, клиенты, ...)
  • Инструменты также выбираются по другим целям (совместимость, цена, простота использования большинством сотрудников)
  • Некоторых инструментов (и, следовательно, бинарных файлов) нельзя избежать, поскольку просто не существует замены, которая могла бы выполнять ту же работу, соответствуя потребностям компании по той же цене.

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

Блокировки не вписываются в философию git (которая никогда не создавалась для двоичных файлов), но есть ситуации, которыми нельзя пренебречь, когда блокировки являются наиболее эффективным способом решения такой проблемы.

person Stefan    schedule 18.05.2016

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

person Cherler Ton    schedule 08.05.2016