Скачать последнюю версию определенной ветки GIT + нет локального репозитория
У меня есть система Bamboo CI с несколькими агентами (то есть распределенными), каждая сборка присваивается следующему доступному агенту; Также обратите внимание, что несколько сборок разных веток одного и того же хранилища могут выполняться одновременно на одном компьютере
Моя сборка должна извлекать код из удаленного репозитория git, и это доходит до интеграции с git.
В настоящее время сборка клонирует репозиторий перед каждой сборкой (жесткое требование) и сохраняет полный репозиторий git (т. Е. Каталог.git) для каждой ветви в одной и той же файловой системе.
Поскольку сборка никак не взаимодействует с git (например, push, pull), кроме проверки самого последнего кода, я хотел бы просто, в терминах ламенса, загрузить последнюю версию данной ветви git и ничего более.
Буду признателен за любую помощь
4 ответа
Я ни в коем случае не эксперт по git, но, возможно, этот похожий вопрос о переполнении стека поможет вам указать правильное направление:
Оказывается, что 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, поскольку у вас есть ровно один, а не один в каждом чокнутом каталоге.