Почему я не могу нажать на неглубокий клон?

T he git clone --depth параметр команды говорит

--depth <depth> 
Create a shallow clone with a history truncated to the specified number of revisions. 
A shallow repository has a number of limitations 
(you cannot clone or fetch from it, nor push from nor into it),
 but is adequate if you are only interested in the recent history of a large project with a long history,
 and would want to send in fixes as patches. 

Почему мелкие клоны имеют это ограничение? Почему это рабочий процесс только для исправлений?

Для некоторых рабочих процессов проекта мне нужно передать кодеру только последнюю фиксацию из одной ветки, а затем дать им возможность отправить свои (перемотка вперед) разработки на главный сервер. Это отчасти для безопасности, защиты IP и размера репо, а отчасти для уменьшения путаницы, которую большое репо может вызвать у наивного кодировщика. Есть ли рабочий процесс git, который позволяет это?


Обновление: на основании ответа Карла Билефельдта правильным ответом должно быть git checkout --orphan . Но по-прежнему нужно «клонировать» эту ветку одному новому пользователю и иметь возможность эффективно использовать ее.

На странице руководства указано:

git checkout [-q] [-f] [-m] [ [-b | -B | --orphan] ] [] --orphan

Создать новую сиротскую ветвь с именем , начиная с и переключитесь на нее. Первый коммит, сделанный на этом новом ветка не будет иметь родителей и станет корнем новой истории полностью отключен от всех других ветвей и фиксируется.

Индекс и рабочее дерево настраиваются, как если бы вы ранее запустите git checkout . Это позволяет вам начать новый история, в которой записан набор путей, подобных <начальная_точка> по легко запустить git commit -a , чтобы сделать корневую фиксацию.

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

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

Интересна ссылка VonC на комментарии Джунио. Я думаю, что руководство должно предоставить руководство в этом случае и разрешить правильную команду [например, clone --options ] для извлечения только соответствующей части репо.Очевидно, что вероятность успеха push увеличивается за счет наличия нескольких связанных коммитов и SHA1 в нижней части истории, которые блокируют сопоставление репо.


Обновление Git 1.9.0: примечания к выпуску 14 февраля ' 14.

«Извлечение из неглубоко клонированного хранилища раньше было запрещено, прежде всего потому, что задействованные кодовые пути не были тщательно проверены и мы не стали поддерживать такое использование. Этот выпуск пытается чтобы разрешить перенос объекта из неглубоко клонированного репозитория в более контролируемый способ (т.е. получатель становится неглубоким хранилищем с усеченной историей) »

Это хорошая новость для мелких клонеров. Далее - Возможно узкие клоны.

45
задан Philip Oakley 15 February 2014 в 18:39
поделиться