| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > УП: Инструменты > Mercuria/git запретить коммит unlocked файла |
| Автор: sblon 10.11.2012, 01:18 |
| В команде есть отдел, где у ребят соглашение: сначала налаживать lock на файл а потом его редактировать, и при коммите лок снимается. Это они делают во избежания того чтобы несколько людей изменяли один файл (там у них вполне обоснованный такой use case). Кто знает возможно ли сделать следующее: при коммите файла проверять, наложил ли данный пользователь lock или нет, и если у него нет лока на этот файл, то отменять коммит? Предпочтительно в Mercurial. Ну это конечко скорее всего хуками делается, но с ними не приходиось работать и всех их возможностей не знаю. |
| Автор: skyboy 10.11.2012, 11:21 |
| http://stackoverflow.com/questions/119444/locking-binary-files-using-git-version-control-system с другой стороны, подобные локи все равно автоматически бы не подтягивались — только после pull'a хуками, если извернуться, можно сделать так, что при коммите делать pull preview. И в случае, если в пулле идет файл "имя лочимого файла + .lock", то при наличии этого файла в коммите фейлить коммит. но все равно, это обнаружится только в момент коммита. а, значит, кому-то придется переделывать заново работу. Мне кажется, можно просто процесс перестроить. Если это бинарник, и мердж его штатными средствами, ну, совсем-совсем, никак не возможен, то рассылать сообщение. мол, собираюсь работать над тем-то, не трожьте пока что. Если этот бинарник имеет некую структуру, или же это не бинарник вовсе, но штатный мердж путается из-за сложной и нетипичной структуры текста, то вот еще решение: разбить эту структуру на кучу файлов, которые будут объединяться в процессе билда на CI. В таком случае, частота конфликтов снизится и резолвиться они смогут в автоматическом режиме. Собственно, именно потому, что так проще резолвить, у нас в репозиториях валятеся не один архив с исходниками внутри, а куча отдельных файлов |
| Автор: skyboy 10.11.2012, 11:43 |
| в http://en.wikipedia.org/wiki/Comparison_of_revision_control_software#General_information систем контроля версий обрати внимание на столбец "Concurrency model" И у Git'a, и у Mercurial'a там указано "Merge", что говорит об отсутствии штатных средств лока файлов. |
| Автор: bilbobagginz 14.11.2012, 02:44 |
какой такой "обоснованный" ? немного недопонимаю основания.... Добавлено через 1 минуту и 50 секунд неужели не пользуетесь mq ? |
| Автор: skyboy 14.11.2012, 12:25 |
о чем речь? |
| Автор: skyboy 14.11.2012, 13:01 |
| mercurial queue? ну, положим, в отличие от Гита, не будет привязки к номеру строки. и что? пока один работал над методом, другой отрефакторил весь класс и целевой метод вообще был разбит на два и переименован. как тут поможет поиск контекста? боюсь, в подобном случае, даже лучше, если автопатчинг не пройдет — а то ищи потом логическую ошибку. |
| Автор: skyboy 16.11.2012, 00:25 |
| bilbobagginz, искренне не понял посыла. да, так можно. да, я и сам так делал. да, без lock'a в данном случае можно обойтись. |
| Автор: bilbobagginz 16.11.2012, 08:56 |
| skyboy, посыл не был кратко описан. а зря, ты прав. Вот он: Обычно в инструменте, которым пользуются миллионы людей с неодинаковыми требованиями, предусмотрено много чего. Поэтому, если тебе не хватает какого-то механизма, для достижения которого надо работать (дописывать функционал), и без которого твой рабочий процесс - нарушается, то скорее всего - твой рабочий процесс не доработан или не подходит для работы с этим конкретным инструментом. |
| Автор: skyboy 16.11.2012, 18:20 |
| bilbobagginz, согласен с тобой: |