Отримання однієї редакції від Git


14

Повна історія редагування Git має багато переваг в рамках процесу розробки.

Але наш продукт є вихідним кодом, ми використовуємо скриптовані мови, які не потребують компіляції чи обробки, і тоді історія Git стає тягарем для розгортання - у нашому прикладі ми розгортаємо чисту віртуальну середу після кожної зміни, маючи кілька розгортань на одна машина.

Є кілька способів зменшити кількість історії, наприклад, дрібні клони, ефективність яких залежить від того, наскільки глибока ревізія знаходиться у гілці, роблячи замість клону, але тоді ви все одно отримуєте історію з ревізії та назад, або отримуєте повну Repo один раз тягніть, коли потрібно, але це марно з точки зору місця на диску і, як правило, менш надійне.

Чи є спосіб отримати одну редакцію від Git без її історії?


1
Пов'язані запитання та відповіді на SO stackoverflow.com/questions/26135216/…
Євген

Відповіді:


16

Дрібний клон

Ви дійсно можете отримати дрібний клон з Git, використовуючи:

git clone --depth=1 <url>

Це все одно буде клонувати репо і створить .gitпапку з об'єктами, лише меншими розмірами (різниця залежно від вашого загального розміру файлу та розміру історії).

Архів Git

Ви також можете використовувати git-архів для витягування архіву репо:

Створює архів заданого формату, що містить структуру дерева для названого дерева, і записує його на стандартний висновок. Якщо вказано, він є попередньо до імені файлів в архіві.

У прикладах це показано, наприклад:

git archive --format=tar --prefix=git-1.4.0/ v1.4.0 | gzip >git-1.4.0.tar.gz

Створіть стислий для версії .

Хостинг 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


7ochem, можливо команда gzip повинна бути gzip -c ....
Ромео Нінов

11

Не розгортайте git repo. Розробити реальну методологію розгортання. Навіть якщо це так просто, як пошук архіву (= побудова артефакту із лише необхідними файлами в ньому для розгортання) розгорнутих сценаріїв.

Навіть якщо ви неглибоко клонуєте кінчик вашого сховища, вам, ймовірно, не знадобляться тести, документація, профілі зв’язування та інші підтримуючі ефемери у розгорнутому середовищі.

Примітка : для сховищ скриптованих мов, які насправді не мають кроку "збірки", тривіальним способом вивільнення артефакту було б упаковка їх в архів, наприклад, tar або rpm. Потім для "розгортання" ви знімаєте архів або встановлюєте rpm. це знімає потребу в інструментах git у вашій мережі розгортання (не всі сервери prod мають ці інструменти розробника).


добре запитати (чи навіть кинути виклик!) відповідь - саме це робить Stack Exchange чудовим :) для сховищ скриптованих мов, які насправді не мають кроку "побудови", тривіальним способом вивільнення артефакту було б пакування їх в архіві, наприклад, tar або rpm. тоді для "розгортання" ви знімаєте архів або встановлюєте rpm. це знімає потребу в інструментах git у вашій мережі розгортання (не у всіх серверів prod будуть ці інструменти для розробників)
RubyTuesdayDONO

1
@ Pierre.Vriens так, ви пропускаєте те, що пропонується як розміщення архіву, тобто створення артефакту із лише необхідними файлами в ньому для розгортання. Це сказав, що я згоден, що це не якісна відповідь, і цю точку слід продовжити. Ми в приватній бета-версії, і відповіді повинні бути
чіткими

Тоді я не бачу, що це приносить більше, ніж прийнята відповідь, якщо це вказує на архів підходить ... це просто зайве, вам слід редагувати, щоб продовжити таким чином iMHo
Tensibai

1
Будь ласка, перевірте мою редакцію вашої відповіді (просто інтегруйте ваш цікавий коментар). Не соромтеся покращити / переробити звичайно, або просто відкатати, якщо вам зовсім не подобається моя редакція. BTW: ваш коментар (= зауваження, яке я додав) змусив мене задуматися як "дійсно, так просто? Знову зразок того, як ми отримуємо речі, виконані в zOS ... з z для нульового простою ...". Я думаю, що настав час почати розпитувати більше питань / відповідей за допомогою подібних коментарів ... Не кидайте мені викликів занадто ...
Pierre.Vriens

я не вважаю, що це повна або модельна відповідь, але я не бачив, щоб хтось звертався до слона в кімнаті: якщо ви використовуєте git для "розгортання" свого проекту, ви "погано пройдете" ;)
RubyTuesdayDONO

6

Питання, чи є спосіб отримати одну редакцію від Git без історії?

Отримати сховище, немає ніякого способу, головним чином тому, що немає "перегляду". Змагання Git store, які є змінами від попереднього стану.
Якщо ви хочете, щоб ваш сховище було в певний момент часу, вам потрібно буде втягнути комісію в цей час, і все це предки, або ви отримаєте лише зміни, внесені в комітети.

Щоб уникнути плутанини: Дрібне клонування отримує необхідну історію, а потім обрізає її на вільний простір, дерево все ще робиться з історії.

Щодо рішень, відповідь @ 7ochem їх покриває.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.