Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
В распределённой системе невозможно обеспечить одновременное выполнение всех трёх условий: корректности (С), доступности (А), устойчивости к сбоям узлов (Р).
git help diff
, там есть ключи --find-renames
, --find-copies
, --find-copies-harder
. Если бы git сохранял информацию о переименованиях, зачем бы были нужны такие ключи?# На исходниках git:
$ git mv ws.c wss.c
$ echo 1>wss.c
$ git add wss.c
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# deleted: ws.c
# new file: wss.c
#
$ git reset --hard HEAD
$ git mv ws.c wss.c
$ git commit -m 'ABC'
$ git diff --name-status HEAD^..HEAD
D ws.c
A wss.c
$ git diff --name-status -C HEAD^..HEAD
R100 ws.c wss.c
# На исходниках mercurial:
$ hg mv README README.md
$ echo 1>README.md
$ hg status -C
A README.md
README
R README
Git не сохраняет информацию о переименованиях, он смотрит на процент сходства. То же, что я говорил, просто это поведение по‐умолчанию у некоторых команд. Mercurial, наоборот, никогда не смотрит на сходство файлов.Это не совсем правда — в индексе в действительности новый файл не создаётся. В противном случае вес репозитория увеличивался бы как минимум на размер переименованного файла. Но это не так.
hg addremove --similarity
.hg mv
, просто через mv
, а потом уже опомнился).incoming
/outgoing
, heads
, serve
. Это всё подозрительно напоминает отнюдь не Git, а Mercurial.Децентрализованная база данных репозитория
Децентрализованная база данных репозитория.
Встречаем Veracity — новую распределенную систему контроля версий