From 3a480661a00dab8fa6721c1b43fec7dcec421ecf Mon Sep 17 00:00:00 2001 From: Tikhon Tarnavsky Date: Sat, 31 Jul 2010 20:48:01 +0300 Subject: [PATCH] ru/history.txt edited --- ru/history.txt | 58 ++++++++++++++++++++++++++++------------------------------ 1 file changed, 28 insertions(+), 30 deletions(-) diff --git a/ru/history.txt b/ru/history.txt index aaaa28d..1401e79 100644 --- a/ru/history.txt +++ b/ru/history.txt @@ -2,9 +2,8 @@ Вследствие распределенной природы Git, историю изменений можно легко редактировать. Однако, если вы вмешиваетесь в прошлое, будьте осторожны: изменяйте только ту часть истории, которой владеете вы и только вы. Иначе, как народы вечно выясняют, кто же именно совершил и какие бесчинства, так и у вас будут проблемы с примирением при попытке совместить разные деревья истории. -Некоторые разработчики убеждены, что история должна быть неизменна со всеми огрехами и прочим. -Другие считают, что деревья нужно делать презентабельными перед выпуском их в публичный доступ. -Git учитывает оба мнения. Также как клонирование, ветвление и слияние, переписывание истории — это лишь еще одна возможность, которую дает вам Git. Разумное ее использование зависит только от вас. +Некоторые разработчики убеждены, что история должна быть неизменна со всеми огрехами и прочим. Другие считают, что деревья нужно делать презентабельными перед выпуском их в публичный доступ. +Git учитывает оба мнения. Переписывание истории, как и клонирование, ветвление и слияние, — лишь еще одна возможность, которую дает вам Git. Разумное ее использование зависит только от вас. === Оставаясь корректным === @@ -12,22 +11,22 @@ Git учитывает оба мнения. Также как клонирова $ git commit --amend -чтобы изменить последнее сообщение коммита. Осознали, что забыли добавить файл? Запустите *git add*, чтобы это сделать, затем выполните вышеуказанную команду. +чтобы изменить последнее описание. Осознали, что забыли добавить файл? Запустите *git add*, чтобы это сделать, затем выполните вышеуказанную команду. Захотелось добавить еще немного изменений в последний коммит? Так сделайте их и запустите $ git commit --amend -a -=== ...И кое-что еще === +=== …И кое-что еще === -Давайте представим себе, что предыдущая проблема на самом деле в десять раз хуже. После длительной работы вы сделали ряд фиксаций, но вы не очень-то довольны тем, как они организованы и кое-какие описания коммитов надо бы слегка переформулировать. В этом случае запустите +Давайте представим, что предыдущая проблема на самом деле в десять раз хуже. После длительной работы вы сделали ряд коммитов; но вы не очень-то довольны тем, как они организованы, и кое-какие описания коммитов надо бы слегка переформулировать. Тогда запустите $ git rebase -i HEAD~10 -и записи в журнале от последних 10-ти фиксаций появятся в вашем любимом редаторе (задается переменной окружения $EDITOR). Например: +и последние десять коммитов появятся в вашем любимом редакторе (задается переменной окружения $EDITOR). Например: pick 5c6eb73 Добавил ссылку repo.or.cz - pick a311a64 Сменил порядок в "Работай как хочешь" + pick a311a64 Переставил аналогии в «Работай как хочешь» pick 100834f Добавил цель для push в Makefile Теперь вы можете: @@ -35,10 +34,10 @@ Git учитывает оба мнения. Также как клонирова - Убирать коммиты, удаляя строки. - Менять порядок коммитов, переставляя строки. - Заменять «pick» на: - * «edit» для внесения правок в коммиты. - * «reword» для изменения записи в логе. - * «squash» для слияния коммита с предыдущим. - * «fixup» для слияния коммита с предыдущим и удаления записи в журнале. + * «edit» для внесения правок в коммиты; + * «reword» для изменения описания в журнале; + * «squash» для слияния коммита с предыдущим; + * «fixup», чтобы слить коммит с предыдущим, отбросив его описание. Сохраните файл и закройте редактор. Если вы отметили коммит для исправлений, запустите @@ -58,34 +57,33 @@ Git учитывает оба мнения. Также как клонирова Это работа для команды *git rebase*, описанной выше. Зачастую, имеет смысл использовать флаг *--onto* и убрать переплетения. -Также см. *git help rebase* для получения подробных примеров использования этой замечательной команды. Вы можете расщеплять коммиты, вы можете даже переупорядочить ветки. +Также см. *git help rebase* для получения подробных примеров использования этой замечательной команды. Вы можете расщеплять коммиты. Вы можете даже переупорядочить ветки. === Переписывая историю === -Время от времени вам может понадобиться в системе управления версиями аналог «замазывания» людей на официальных фотографиях, как бы стирая их из истории в духе сталинизма. Например, предположим, что мы уже собираемся выпустить релиз проекта, но он содержит файл, который не должен стать достоянием общественности по каким-то причинам. К примеру, я сохранил номер своей кредитки в текстовый файл и случайно добавил его в проект. Удалить файл недостаточно: он может быть доступен из старых коммитов. Нам надо удалить файл из всех ревизий: +Время от времени вам может понадобиться в системе управления версиями аналог «замазывания» людей на официальных фотографиях, как бы стирая их из истории в духе сталинизма. Например, предположим, что мы уже собираемся выпустить релиз проекта, но он содержит файл, который не должен стать достоянием общественности по каким-то причинам. Возможно, я сохранил номер своей кредитки в текстовый файл и случайно добавил его в проект. Удалить файл недостаточно: он может быть доступен из старых коммитов. Нам надо удалить файл из всех ревизий: $ git filter-branch --tree-filter 'rm совершенно/секретный/файл' HEAD См. *git help filter-branch*, где обсуждается этот пример и предлагается более быстрый способ решения. Вообще, *filter-branch* позволяет изменять существенные части истории при помощи одной-единственной команды. -После этой команды каталог +.git/refs/original+ будет описывать состояние, которое было до ее вызова. Убедитесь, что команда filter-branch сделала то, что вы ожидали, и если хотите опять использовать эту команду, удалите этот каталог. +После этой команды каталог +.git/refs/original+ будет описывать состояние, которое было до ее вызова. Убедитесь, что команда filter-branch сделала то, что вы хотели, и если хотите опять использовать эту команду, удалите этот каталог. -И, наконец, замените клоны вашего проекта обновленной версией, если собираетесь в дальнейшем с ними взаимодействовать. +И, наконец, замените клоны вашего проекта исправленной версией, если собираетесь в дальнейшем с ними взаимодействовать. === Создавая Историю === [[makinghistory]] -Хотите перевести проект под управление Git? Если сейчас он находится под управлением какой-либо из хорошо известных систем управления версиями, то весьма велики шансы на то, что кто-нибудь уже позаботился и написал необходимые скрипты для экспорта всей истории проекта в Git. +Хотите перевести проект под управление Git? Если сейчас он находится под управлением какой-либо из хорошо известных систем управления версиями, то вполне вероятно, что кто-нибудь уже написал необходимые скрипты для экспорта всей истории проекта в Git. -Если нет, то смотрите в сторону команды *git fast-import*, которая считывает текстовый ввод в специальном формате для создания истории Git "с нуля". Обычно скрипт, использующий эту команду, бывает слеплен наспех для единичного запуска, переносящего весь проект за один раз. +Если нет, то смотрите в сторону команды *git fast-import*, которая считывает текстовый ввод в специальном формате для создания истории Git с нуля. Обычно скрипт, использующий эту команду, бывает слеплен наспех для единичного запуска, переносящего весь проект за один раз. В качестве примера вставьте такие строки во временный файл, вроде '/tmp/history': - ---------------------------------- commit refs/heads/master committer Alice Thu, 01 Jan 1970 00:00:00 +0000 data <