Есть ли проверка в git, чтобы избежать работы над одним и тем же фрагментом кода и избежать последующего конфликта

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

2 ответа

Git обнаруживает, что кто-то еще изменил хранилище, когда вы либо спрашиваете, было ли изменение, либо пытаетесь ли вы его изменить. Итак, вкратце: нет. Общение с вашей командой вне git возможно, однако. Желательно даже.

Git - это DVCS (где D означает децентрализованный). Нет сведений о локальной копии хранилища других соавторов.

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

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

mkdir gitTests
cd gitTests
#Create our remote (server)
git init --bare remote

#Create a new repo in directory foo
git init foo
cd foo
echo 'a' > a
git add a
git commit -m 'First commit'
#Set the remote as our central repo and push to it
git push --set-upstream ../remote master

#Create our colleague's repo from the remote
git clone ../remote ../bar
#Colleague makes a commit, pushes to remote
cd ../bar
echo 'b' >> a
git commit a -m 'Colleague commit'
git push

#We work on the same file, creating a merge conflict
cd ../foo
echo 'c' >> a
git commit a -m 'Our conflicting commit'
git push
#We get an error, because our push is non fast-forward, we need to pull before
git pull
#Here, we get a local merge conflict

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

Другие вопросы по тегам