git vs mercurial (было "vcs vs vcs")
Модератор: Модераторы разделов
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
-
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: git vs mercurial
Спасибо. В elinks-е страница нормально не отобразилась, а midori через gprs -- это что-то страшное. Доберусь до большой машины -- посмотрю.sash-kan писал(а): ↑05.04.2010 13:55делюсь накопленными интересными и не очень ссылками «про git».
https://www.google.com/bookmarks/l#!thr...c8W3woQlIHt6vwk
первой ссылкой идёт «басня о git». буквально «на пальцах» объясняется, как последовательно складывалась архитектура git-хранилища.
Действительно советую посмотреть оба хотя бы по документации и обзорам и выбрать, "куда больше душа ляжет".
А он умеет, скажем, git add и git commit без параметров? Когда выбирал, не посмотрел, а на практике оказалось очень удобно./dev/random писал(а): ↑05.04.2010 15:25Вообще, самые простые команды в git и hg полностью совпадают.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: git vs mercurial
а что-то, как я понял, git он для ядра заточен, да и название непонятное (что такое Hg я знаю...). Пока ковыряю ртуть, вроде не так уж и сложно... И документации достаточно (есть даже и по-русски!)
-
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: git vs mercurial
Да, выбор действительно больше субъективен. (: Я у кого-то даже читал, что он остановился на hg, т.к. на одну букву короче -- набирать быстрее. (:
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: git vs mercurial
намного быстрее - кнопки ещё и расположены рядом. (:
-
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: git vs mercurial
к git add по умолчанию надо хотя бы точку добавить.
git commit без параметров по умолчанию откроет редактор, прописанный в первом из встреченных: $GIT_EDITOR, core.editor configuration variable, $VISUAL, $EDITOR.
p.s. всё это помимо того, что можно назначить git алиас для любой команды (это не shell alias!). ссылку я приводил выше.
alias g=git? (улыбка)
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: git vs mercurial
букмарки, наверно не отобразились? потому что «басня» должна работать нормально: http://hades.name/blog/2009/05/23/the-git-parable-ru/
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: git vs mercurial
Ну, точку можно и добваить, она не длинная. (:
Это ты про задание описания коммита? Нет, я о другом: список файлов или каталогов перечислять не нужно. Впрочем, наверное тоже достаточно точки.
Насколько я помню, hg тоже умеет.
Это я больше для юмора и написал. (:
Да, именно букмарки. Спасибо за ссылку, почитаю надосуге.sash-kan писал(а): ↑06.04.2010 02:00букмарки, наверно не отобразились? потому что «басня» должна работать нормально: http://hades.name/blog/2009/05/23/the-git-parable-ru/
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: git vs mercurial
не надо никаких точек commit-у. без параметров откроется редактор для комментария к коммиту.
а коммититься будут все изменения, что внесены в index с помощью git add. важно: не всё, что изменилось, а только то, что в index-е.
index — насколько я знаю, исключительно git-овская фича. у Oliver Steele в блоге хорошо (в частности) про index написано. доступно. правда, по английски. в приведённых выше букмарках ссылка есть. повторю отдельно: http://osteele.com/archives/2008/05/my-git-workflow
обычно, впрочем, поступают по-простому, как и в традиционных vcs-ах:
$ git commit -a
т.е., git сам найдёт все изменённые файлы, включит их в index, и на их основе будет делать commit.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: git vs mercurial
Да, извини, туплю. Конечно, по умолчанию будут коммититься те файлы, что были добавлены. Т.е. с коммитом всё совершенно аналогично.sash-kan писал(а): ↑06.04.2010 12:03не надо никаких точек commit-у. без параметров откроется редактор для комментария к коммиту.
а коммититься будут все изменения, что внесены в index с помощью git add. важно: не всё, что изменилось, а только то, что в index-е.
index — насколько я знаю, исключительно git-овская фича. у Oliver Steele в блоге хорошо (в частности) про index написано. доступно. правда, по английски. в приведённых выше букмарках ссылка есть. повторю отдельно: http://osteele.com/archives/2008/05/my-git-workflow
обычно, впрочем, поступают по-простому, как и в традиционных vcs-ах:
$ git commit -a
т.е., git сам найдёт все изменённые файлы, включит их в index, и на их основе будет делать commit.
И ещё раз спасибо за ссылку, отличная басня. Но принципиальных различий в архитектуре так и не увидел.
Единственное существенное (но не архитектурное) отличие: hg не допускает удаления снимков из истории. Т.е. из описанного в главе "переписывание истории" можно сделать всё, кроме собственно удаления "ненужных" снимков из истории. На мой взгляд, это хорошо, т.к. не позволяет сделать непоправимую ошибку.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: git vs mercurial
там команды-то... зачем для ci алиас?
я только начинаю разбираться, но вроде в hg, то что не внесено в "индекс" (не добавлено hg add), то просто отображается с вопросами, типа
new_file1 ?
new_file2 ?
и т.д. Причём как я понял, изменения в этих левых файлах не отслеживаются. Или я не прав?
-
- Модератор
- Сообщения: 1786
- Статус: Матёрый линуксоид
- ОС: Debian testing/unstable
Re: git vs mercurial
При любом "переписывании истории" в гите правятся только ссылки. Это как операции вставки-удаления-замены над связными списками (элемент списка - коммит). Сами данные из гитовского репозитория удаляются, афаик, только при git gc (явная команда для выкидывания коммитов и других объектов, на которые никто не ссылается).
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: git vs mercurial
t.t писал(а): ↑06.04.2010 12:32Единственное существенное (но не архитектурное) отличие: hg не допускает удаления снимков из истории. Т.е. из описанного в главе "переписывание истории" можно сделать всё, кроме собственно удаления "ненужных" снимков из истории. На мой взгляд, это хорошо, т.к. не позволяет сделать непоправимую ошибку.
Спасибо. Ваш пост говорит, что я вроде-бы всё правильно понял...
А удаление снимков - ИМХО плохая идея. Тут я согласен.
-
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: git vs mercurial
Ну, ci ведь не единственная команда, есть и подлиннее. (;
Правы.
Да, в hg этого нельзя сделать даже "явной командой". На мой взгляд, история должна быть полной -- что бы там кто ни придумал; иначе ситуации "шеф, всё пропало!" © не исключены.Portnov писал(а): ↑06.04.2010 13:29При любом "переписывании истории" в гите правятся только ссылки. Это как операции вставки-удаления-замены над связными списками (элемент списка - коммит). Сами данные из гитовского репозитория удаляются, афаик, только при git gc (явная команда для выкидывания коммитов и других объектов, на которые никто не ссылается).
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: git vs mercurial
даже если в mercurial есть сущность под названием index, не стоит её путать с git-овым index-ом.
но я подозреваю, что сущности такой нет. следовательно, лучше оставить git-ово git-у.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: git vs mercurial
вот с этим ещё не разобрался, но есть что-то, что запоминает все файлы вместе с их sha1. И новые файлы не добавляются сами по себе. Как я понимаю - это индекс.
-
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: git vs mercurial
Есть сущность, в точности равная git-овому index-у, но index-ом она (насколько я знаю) не называется.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: git vs mercurial
можно продемонстрировать в виде команд и их вывода?
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
- Администратор
- Сообщения: 5364
- ОС: Gentoo
Re: git vs mercurial
Её нет. Максимально близкая сущность называется dirstate, но она, в отличие от index'а, не включает в себя содержимое файлов, а только краткую информацию о них. В git команда commit запишет в репозиторий именно содержимое index'а, и даже если какие-то файлы после этого изменились, записаны будут их старые версии. В hg такого временного хранилища нет, и записаны файлы будут в том виде, в котором они сейчас находятся в дереве.
-
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: git vs mercurial
Прошу прощения, я, возможно, не совсем верно понял.то изменение 2 будет закоммичено или нет?
Вот здесь имелось ввиду, что в index с помощью add добавляются именно изменения, или файлы? Т.е., если сделать
Shell
git init
echo 1 >file
git add file
echo 2 >>file
git commit
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: git vs mercurial
файлов, грубо говоря, в git-е нет. есть diff-ы.
нет.
t.t
загляни всё-таки в блог, ссылку на который я приводил: http://osteele.com/archives/2008/05/my-git-workflow
основная идея index-а видна и в первой картинке. но и текст почитать стоит. там (в том числе и) о разных моделях использования репозитория идёт речь.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: git vs mercurial
Да, уже вспомнил, извини. Это была одна из неосновных причин выбрать mercurial. (: Идея принудительно добавлять каждое изменение (а не файл) показалась мне несколько странной. Да, файлов внутри dvcs (любой, не только git) нет, но они есть в самих хранимых данных, и потому часто удобнее оперировать именно файлами, а не диффами. Если же мне нужно будет изолировать некоторые диффы (а не файлы) то, на мой взгляд, удобнее создать для них отдельную ветку. А не хранить их только локально, создавая тем самым ещё одну возможность потерять изменения навсегда, кроме "переписывания истории".
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: git vs mercurial
повтор:
углубление вплоть до отдельных чанков — вещь опциональная. можно состариться, но так ею ни разу и не воспользоваться. т.е., хочешь оперировать понятием «файл» — оперируй. git в этом мешать не будет.
Тихон, именно так и делается во всех vcs. разница лишь в простоте и количестве накладных расходов на создание веток.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: git vs mercurial
cat ~/.gitconfig
Код: Выделить всё
[alias]
...
ci = commit -a
Однако, ни в одной vcs не видел такой замечательной штуки, как git'овский stash.
Мои розовые очки
-
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: git vs mercurial
hg shelvewatashiwa_daredeska писал(а): ↑07.04.2010 14:24Однако, ни в одной vcs не видел такой замечательной штуки, как git'овский stash.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: git vs mercurial
git-овский репозиторий в любом случае хранится локально. обмен информацией с другими репозиториями — это совершенно отдельный разговор.
«переписывание истории» — штука, imho, опасная и вредная. я лично никогда не переписываю. надо откатить commit в репозитории — просто делаю контр-коммит: http://book.git-scm.com/4_undoing_in_git_-...and_revert.html
по поводу git-овского index-а, как промежуточного псевдо-репозитория, споры, вероятно, не утихнут никогда. можно им пользоваться, можно игнорировать его существование.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: git vs mercurial
Спасибо за поправку. Привычка со времён cvcs.
А это и есть наиболее принципиальные отличия. Остальное либо сугубо косметическое, либо существует в виде "расширений", как в примере выше.sash-kan писал(а): ↑07.04.2010 19:25«переписывание истории» — штука, imho, опасная и вредная. я лично никогда не переписываю. надо откатить commit в репозитории — просто делаю контр-коммит: http://book.git-scm.com/4_undoing_in_git_-...and_revert.html
по поводу git-овского index-а, как промежуточного псевдо-репозитория, споры, вероятно, не утихнут никогда. можно им пользоваться, можно игнорировать его существование.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: git vs mercurial
если смотреть с таких абстрактных высот, то, пожалуй, и разницу между vcs и dvcs можно проигнорировать.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: git vs mercurial
концептуально разработчик, игнорирующий существование git-овского index-а, ничем не ограничен.
я лично по большому счёту использую этот промежуточный «репозиторий» для формирования более «красивых» и логически увязанных коммитов.
ещё больше в этом плане даёт возможность оперировать отдельными chunk-ами, но я лично никогда в такие глубины не нырял (и правильно делаю, надо сначала жирком опытом обрасти).
p.s. кстати, как у mercurial обстоит дело с chunk-ами? беглый осмотр гугля приводит к расширению mq, но, судя по описанию, это совершенно не то.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: git vs mercurial
кстати, насколько я понимаю, работа с chunk-ами и существование index-а связаны неразрывно.
продемонстрирую примером:
1.1. я внёс изменение в файл1.
1.2. я внёс связанное с ним изменение в файл2.
2.1. я припомнил, что давно надо бы подправить один момент в файл1, что и делаю.
2.2. вношу связанное с ним изменение в файл2.
итого получается по два изменения в двух файлах.
насколько просто я смогу в том же mercurial-е занести их двумя отдельными коммитами? чтобы в первом коммите были 1.1 и 1.2, а во втором 2.1 и 2.2?
почему хочется отдельными? потому что 1.* никак не связаны с 2.*.
продемонстрирую примером:
1.1. я внёс изменение в файл1.
1.2. я внёс связанное с ним изменение в файл2.
2.1. я припомнил, что давно надо бы подправить один момент в файл1, что и делаю.
2.2. вношу связанное с ним изменение в файл2.
итого получается по два изменения в двух файлах.
насколько просто я смогу в том же mercurial-е занести их двумя отдельными коммитами? чтобы в первом коммите были 1.1 и 1.2, а во втором 2.1 и 2.2?
почему хочется отдельными? потому что 1.* никак не связаны с 2.*.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог