Моя цель - клонировать / вытащить / любую копию последней версии ветви моего репозитория на мой тестовый веб-сервер для тестирования перед производством.

Примечание. Я понимаю, что здесь есть множество похожих вопросов, но те, которые я изучал, достаточно отличались от моей ситуации, и я все еще немного растерялся.

Я не очень хорошо разбираюсь в git в командной строке (я склонен использовать инструменты с графическим интерфейсом), поэтому я не уверен, имею ли я это право. То, что у меня есть, работает, но первоначальная тяга казалась довольно большой, поэтому мне интересно, получаю ли я всю историю или только последнюю версию.

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

Допустим, у меня есть ветка с именем test, которую я буду загружать на тестовый веб-сервер. Тем не менее, нам не нужен корневой каталог репозитория, потому что там есть некоторая путаница. Нам нужен только каталог /sub и все, что ниже. Начальная настройка на моем сервере:

$ cd ~/webapps/test_dir
$ git init
$ git remote add origin https://github.com/user/repository.git
$ git config core.sparseCheckout true
$ echo "sub/*" >> .git/info/sparse-checkout

Затем каждый раз, когда я хочу обновить код на сервере, это то, что я буду запускать:

$ git pull --depth=1 origin test

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

Обновить

В свете отсутствия поддержки Github для git archive (что выглядит как способ пойти иначе), я пытаюсь найти решение получение архива с использованием APIv3, которое они предложили в ответном письме службы поддержки.

Я дошел до того, что получил загруженный архив с правильной веткой моего репо:

$ curl -L --user "username" https://api.github.com/repos/<username>/<reponame>/tarball/<branchname> > example.tar.gz

Но это получает меня все из корня ветви. Что я действительно хочу, так это только одна подпапка, но мне еще предстоит выяснить, как это отфильтровать.

Обновить обновление

Получил подтверждение от GitHub, что нет способа извлечь подпапку с помощью этого метода API. Так что ... вернемся к тому, как я это делал, я думаю.

1
bobtiki 24 Апр 2017 в 02:03

2 ответа

Лучший ответ

Ссылаясь на этот ответ Энтони Хатзопулоса, кажется, что наилучшим способом сделать это может быть использование совместимости с GitHub Subversion и сделай это:

$ svn export --force https://github.com/<user>/<repo>/branches/<branch>/<subfolder>

Делает именно то, что я хотел, без всякой затеи.

--force должен заменить любые текущие файлы / папки новыми. Конечно, это означает, что я заменяю все вместо дополнительных обновлений, но ... компромиссы? ¯ \ _ ( ツ ) _ / ¯

0
Community 23 Май 2017 в 10:31

Возможно, вы захотите использовать git archive, а не извлекать данные для отображения данных без привязанной к ним истории. Официальные документы для этой команды находятся по адресу https://git-scm.com/docs/git- архив.

Что-то вроде git archive branchname | tar xf - должно быть правильно, чтобы выгрузить коммит из заголовка соответствующей ветки в локальный каталог.

Если вы хотите поместить свои экспортированные биты в подкаталог, вы можете использовать что-то вроде git archive foo --prefix branch/ | tar xf -, и это поместит все коммиты из HEAD ветви foo в каталог branch. Вы также можете перенаправить команду tar, чтобы переместить ее в другое место, но поскольку вы находитесь в каталоге с вашим приложением git, в локальном каталоге из первой части по-прежнему будет находиться .git.

1
heckj 24 Апр 2017 в 21:18