Наличие полной истории изменений Git имеет много преимуществ как часть процесса разработки.
Но наш продукт - это исходный код, мы используем скриптовые языки, которые не нуждаются в компиляции или обработке, и тогда история Git становится бременем для развертывания - в нашем примере мы внедряем чистую виртуальную среду после каждого изменения, имея несколько развертываний на одна машина.
Есть несколько способов уменьшить количество истории, например, мелкие клоны, эффективность которых зависит от того, насколько глубока ревизия в ветке, делать выборку вместо клона, но тогда вы все равно получаете историю из ревизии и обратно или получаете полную версию Репо один раз, затем потяните при необходимости, но это расточительно с точки зрения дискового пространства и имеет тенденцию быть менее надежным.
Есть ли способ получить единственную ревизию от Git без его истории?
Ответы:
Мелкий клон
Вы действительно можете получить мелкий клон из Git, используя:
Это все равно клонирует репо и создаст
.git
папку с объектами, только меньшего размера (разница зависит от вашего общего размера файла и размера истории).Git архив
Вы также можете использовать git-archive для распаковки архива репо:
В примерах это показывает, например:
Hosted Git, архив API
Если вы размещаете репо на GitHub, то вы можете использовать их архивный API :
https://api.github.com/repos/<username>/<repository>/zipball/<commit_hash>
Bitbucket.org имеет такую же функциональность для этого:
https://bitbucket.org/<username>/<repository>/get/<branch_name|commit_hash|tag>.zip
источник
Не используйте ваш репозиторий Git. Разработайте реальную методологию развертывания. Даже если это так же просто, как собрать архив (= создать артефакт с необходимыми файлами для развертывания) развернутых сценариев.
Даже если вы мелко клонируете кончик вашего исходного репозитория, вам, скорее всего, не понадобятся юнит-тесты, документация, профили линтинга и другие вспомогательные эфемеры в развернутой среде.
Примечание : для репозиториев скриптовых языков, которые на самом деле не имеют шага «сборки», тривиальным способом освобождения артефакта будет упаковка их в архив, такой как tar или rpm. Затем, чтобы «развернуть», вы распаковываете архив или устанавливаете rpm. это устраняет необходимость использования инструментов git в вашей цепочке развертывания (не все серверы prod будут иметь эти инструменты разработки).
источник
Чтобы получить репозиторий, нет, нет никакого способа, главным образом потому, что нет «ревизии». Git Store фиксирует, которые являются изменениями из предыдущего состояния.
Если вы хотите, чтобы ваш репозиторий находился в определенный момент времени, вы должны извлечь коммит в это время и всех его предков, иначе вы получите только изменения, сделанные в коммите.
Чтобы избежать путаницы: мелкое клонирование получает необходимую историю, а затем обрезает ее до свободного пространства, дерево все еще создается из истории.
Для решений @ 7ochem answer охватывает их.
источник