2010-08-18 4 views
1

У меня есть хранилище git с сотнями коммитов. Когда я клонировать его, я получаю много продукции, как это:Слияние коммитов в git

... получил ac6d99d2762efe0fcf2b78656e336c25ca8428d5 получил ef98d4e93c680384f8174b95e431627b29a56580 получил 4d6e1231e0f6265458a8e6ab47a44bfcd357486b получил 7e3d3a2fc10d0dfe00e87e8eed4a3fc1efa5eaed ходьбы b43c1e0062b72d3ab416ad209e94e13a6c71815d ...

Это соответствует каждый фиксации , что раздражает. Есть ли способ «слияния» коммитов (они больше не нужны), кроме (очевидного) импорта HEAD в новый репозиторий?

Редактировать: clone cmd выполняется с помощью метода http.

+1

Можете ли вы отредактировать quesitons, чтобы добавить командную строку, которую вы использовали для клонирования? –

+0

Вы действительно пытаетесь удалить историю, чтобы сделать вывод 'git clone' менее« раздражающим »? – Cascabel

+0

Jefromi: Я бы сохранил исходное (полное) репо на резервном пространстве. Поскольку код еще не разработан, я хочу сделать процесс клонирования максимально тихим. –

ответ

2

не нужны больше

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

  • Является ли выход git-clone загромождать экран? Вы можете избежать этого, используя флаг -q, чтобы сделать его более спокойным. Вы также можете обновить - в версии 1.7.1, я не получу длинный список коммитов, если я не попрошу дополнительных подробностей (с -vv).

    Бесполезный вывод только в неискушенном протоколе HTTP. Использование протоколов git или ssh более эффективно, и GitHub поддерживает их все. Также читайте о новых Smart HTTP Transport.

  • Вы привыкли к централизованному VCS, где рабочая копия имеет только последнюю версию? Лучшим эквивалентом, вероятно, является мелкий клон, созданный с помощью git clone --depth=n, где n - сколько истории вы хотите. У этого есть some limitations, о котором вы должны прочитать, но он позволяет вам клонировать только недавнюю историю и по-прежнему вносить изменения, которые можно отбросить назад.

    Вы не сохраняете столько места, сколько вы могли бы ожидать с помощью мелкого клона, между прочим, я выбрал случайный проект, а 2,2 МБ истории сократился до 1,2 МБ, когда я только схватил последнюю фиксацию. Пакет Git очень эффективен в пространстве.

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

+0

Спасибо за очень хорошее объяснение. :-) –

2

Если возникли проблемы с git clone, вы можете попробовать использовать флаг -q, чтобы сообщить об этом более спокойно.

Если вы хотите объединить фиксации, используйте git rebase -i. В git parlance объединение одного коммита в другое называется «раздавливанием». Имейте в виду, что это влияет только на текущую ветку. Если коммиты существуют в других ветвях, они все равно будут существовать на других ветвях.

+0

Если вы действительно хотите, по какой-то причине хотите уничтожить * все * этой истории, превратив ее в одну фиксацию, скорее всего, будет проще просто удалить каталог .git, запустить 'git init', добавить все , и совершить его. – Cascabel

+0

Кроме того, я нахожу, что git rebase не для слабонервных даже на простом репо, и я чувствую, что что-то не так с клонированием репо. –