Скачать последнюю версию определенной ветки GIT + нет локального репозитория

У меня есть система Bamboo CI с несколькими агентами (то есть распределенными), каждая сборка присваивается следующему доступному агенту; Также обратите внимание, что несколько сборок разных веток одного и того же хранилища могут выполняться одновременно на одном компьютере

Моя сборка должна извлекать код из удаленного репозитория git, и это доходит до интеграции с git.

В настоящее время сборка клонирует репозиторий перед каждой сборкой (жесткое требование) и сохраняет полный репозиторий git (т. Е. Каталог.git) для каждой ветви в одной и той же файловой системе.

Поскольку сборка никак не взаимодействует с git (например, push, pull), кроме проверки самого последнего кода, я хотел бы просто, в терминах ламенса, загрузить последнюю версию данной ветви git и ничего более.

Буду признателен за любую помощь

4 ответа

Я ни в коем случае не эксперт по git, но, возможно, этот похожий вопрос о переполнении стека поможет вам указать правильное направление:

Есть ли "git export" (как "svn export")?

Оказывается, что Bamboo 3.4 примерно следует совету Let_Me_Be "из коробки" при отметке опции "Мелкий клон" (которая имеет гораздо более интересные функции, такие как планы с несколькими хранилищами, задачи проверки и подмодули git)

Хорошо, вот как бы я это сделал:

Настроить:

git init build_dir
cd build_dir
# repeat for all repositories
git remote add REPO_NAME GIT_REPO_URI

Оформить заказ на конкретную ветку:

git fetch --all # fetch all updates
git fetch REPO_NAME # just fetch one repo
git checkout master
git reset --hard REPO_NAME/repository

Время от времени бегите:

git gc --aggressive
git clone -b branchname --depth 1 git@git.example.com:repository.git /path/to/your/repo

Это создаст так называемый "мелкий клон". Он содержит только самый последний коммит указанной ветви. Таким образом вы будете тянуть только абсолютно необходимые биты.

Цитировать из git clone справочная страница:

--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.

Редактировать: AFAIK Git не может "экспортировать" из удаленного каталога напрямую. Но описанный выше подход примерно эквивалентен экспорту из удаленного пункта. Если вы не хотите .git каталог, просто удалите его. Это намного проще, чем в мире SVN, поскольку у вас есть ровно один, а не один в каждом чокнутом каталоге.

Другие вопросы по тегам