to post messages and comments.

Git ?

Накоммитил в гит, и забыл один файлик добавить в коммит. При этом файл уже трекался ранее (я его переместил). Я добавил его следующим коммитом, и потом сделал squash этих двух, гит ничего не понял и один файл удалил, другой добавил. Как сказать гиту "это не новый файл, это вон тот переименовался"?

Наткнулся на Git from the inside out (текст), понравилось.

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

Также захотелось увидеть что-то подобное про Mercurial. Видео не нашёл, и в процессе поиска вспомнил, что Меркуриал не задуман так, чтобы выставлять детали имплементации. Но если очень хочется, то официальная wiki — это наиболее содержательный источник информации. Начать удобнее всего оказалось с Mercurial for Git users и далее следовать по ссылкам на термины. В разделе Developer Info — Internals оказалось не густо.

На SO упоминаются статьи Behind the scenes и Towards a Better SCM: Revlog and Mercurial (гуглибельно, я не знаю нормальной ссылки), но они не слишком содержательны, по крайней мере на том уровне, на котором я хотел удовлетворить своё любопытство.

Одна деталь:
Аналогом команды git cat-file для просмотра внутренних бинарных файлов в Mercurial является подмножество команд hg debug*. Полный список дебажных команд удобнее получить через hg help debug.

Git

A novice was learning at the feet of Master Git. At the end of the lesson he looked through his notes and said, “Master, I have a few questions. May I ask them?”

Master Git nodded.

“How can I view a list of all tags?”

“git tag”, replied Master Git.

“How can I view a list of all remotes?”

“git remote -v”, replied Master Git.

“How can I view a list of all branches?”

“git branch -a”, replied Master Git.

“And how can I view the current branch?”

“git rev-parse --abbrev-ref HEAD”, replied Master Git.

“How can I delete a remote?”

“git remote rm”, replied Master Git.

“And how can I delete a branch?”

“git branch -d”, replied Master Git.

The novice thought for a few moments, then asked: “Surely some of these could be made more consistent, so as to be easier to remember in the heat of coding?”

Master Git snapped his fingers. A hobgoblin entered the room and ate the novice alive. In the afterlife, the novice was enlightened.


stevelosh.com

А как можно посчитать кумулятивное количество правок между двумя коммитами? У них разница в два года и меня интересует не статистика по прямому диффу, а именно сумма всех правок. Желательно еще по маске с расширением.

Ребзя, я чё-т затупил. Вот есть у меня рабочий сервере QNAP, наружу торчит даже. Есть на нём установленный через его вебморду git. Внимание, вопрос: что мне нужно сделать, чтобы перенести репозитории на сервер в git и обращаться к ним уже через гит-клиента? Вот представьте, что я от линукса знаю только про командную строку, а где что лежит и как настраивается не знаю. Куда сходить, что поставить, кому что прописать?

hg Git ?

Я ведь правильно понял, что bookmarks в hg это ветки в git (причем, закладки в hg — локальные, их можно залить на удаленный репозиторий, но только в справочных целях, или хз) , теги — это теги, а ветки в hg — это вообще нёх. Каждый коммит типа помечается именем ветки, в результате ветка — это кусок графа коммитов, который может иметь несколько висячих голов, и есть специальные коммиты для "закрывания голов". Я представляю как это придумывалось, типа чтобы не терять код и не путаться в топологии веток, что от чего пошло, но вот у меня ветка с кучей голов, и что мне с ними делать? В гите эти головы будут просто именованными ветками, удалил ветку — "закрыл голову", а в hg и закладки не являются полноценными ветками, и ветки овердезайнутый кал.
Я всё верно понял?

Блин, как меня достало каждый раз при заведении сложного репозитория ломать голову, [email protected] или [email protected] На первом коммьюнити и внешние инструменты. На втором — беспроблемная работа. Ну не осиливаю я логику Git. 60+ репозиториев на GitHub и каждый день(!) приходится ломать голову, как победить очередные проблемы с коммитами. В то время, как в Mercurial всё просто молча работает не вызывая проблем... Это уже даже не карма какая-то, это идеологическая несовместимость, видимо :) Что делать, блин...

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

Git ?

где-нибудь в интернете есть хорошее (да хоть какое-то) обьяснение что делать в случае "я взял зип в какой-то момент, как-то его поредактировал, теперь хочу влить его обратно"? Самому лень писать. Не гуглится вообще напрочь.

У меня есть два рефакторинга
1. Было перемещено много файлов в разные каталоги, много из перемещённых файлов еще и редактировались.
2. Массивных перемещений не было, но было много правок в существующих файлах, некоторые файлы были удалены, некоторые созданы
Хочу эти два рефакторинга смержить. Если конкретно, то хочу сказать гиту, что путь A теперь соответстует пути B, путь C соответствует пути D и так далее. Т.е. рефакторинг 2 произвести над теми же файлами в новых путях рефакторинга 1. Нечто вроде git merge -s recursive -X subtree=path но расширенное.

Git ?

У меня есть два состояния репозитория, один до рефакторинга, другой после. При рефакторинге много файлов было перемещено (целыми каталогми). Хочу чтобы git diff показал мне инфу в максимально сокращенном виде: какой каталог куда был перемещён без деталей по каждому файлу., ибо файлов слишком много.

Скачала портабельный git под Windows. Этот китайский танк за собой тянет MINGW32 и весь прочий кишлак. Запустила Баш – засрало мне AppData. Портабельность! Но! Вообще, прикольно, сижу, играюсь, разбираюсь, как оно всё «виртуализует».

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

Пытаюсь понять, как держать актуальную версию. В hg я делаю pull, потом update, и я знаю, что update по умолчанию либо обновит, либо пожалуется, что у меня закралась пакость в этом каталоге, и я при необходимость могу сломать эту пакость через колено, сделав принудительное обновление, и у меня будет свежая версия из репозитория. Про git в Интернете пишут, что git pull = git fetch && git merge, но я не хочу merge. Если у меня что–то поменялось, я не хочу это сливать, а хочу свежую версию из репозитория. Не понимаю. Может, надо было через hg-git работать и не мучиться с этим непонятным git.

переименовал и переписал. На хаскель, да. Пока никакого теорката, тупо преписал 1 в 1. Ну кроме алгоритма поиска оптимального пути, но там совсем трешак был. И он был покрыт тестами, так что с ним особо проблем не было. Вообще готовые тесты помогли, особенно интеграционные. Я так и оставил их на перле, тем более что HUnit, прямо скажем, по сравнению с Test::More посасывает.

Там ещё торчат нитки (Invalid arguments: []), но все тесты проходят, в том числе на виндовс. Буду пробовать уже в продакшене и потихоньку вернусь к фичам.

толпа бабуинов поработала с git-ом. в итоге ВСЕ и КАЖДЫЙ файл в рабочей копии содержит метки "<<<<<< HEAD" и "--------" и содержимое дважды. как покорректнее это исправить? пиздить бабуинов ногами не предлагать — это будет сделано, но позже.

в реддите всплыл старый пост про "git-push — Update remote refs along with associated objects", я подумал — а ведь никто, кто в ман заходит по делу, а не доебаться, наверное просто не обращал внимания никогда на эту строчку. Потому что ну ёпта, что делает пуш? Понятно что делает. Важно как он это делает, и как его вызывать, а это уже следующуе строчки.

Вот я написал быдлокод, сделал пару коммитов. Я не уверен, нужны ли эти коммиты или нет. Вроде, что с ними, что без них, примерно одинаково. Но скорее, всё-таки, нужны.
Возможно, мне хотелось бы иметь две версии, с ними и без них.

Как бы теперь лучше это оформить? Ветки тут вроде не то...
Может быть, есть какой-то способ обернуть пару коммитов в #ifdef?

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

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

Собственно какие бест практис? Тягать код на флешечке?