Загрузите определенный тег с помощью Git
Я пытаюсь выяснить, как я могу загрузить конкретный тег репозитория Git - это одна версия за текущей версией.
Я видел, что на веб-странице git был тег для предыдущей версии, с именем объекта чего-то длинного шестнадцатеричного числа.
но имя версии "Tagged release 1.1.5" по Сайте.
я попробовал такую команду (с измененными именами):
git clone http://git.abc.net/git/abc.git my_abc
и я действительно получил что - то-каталог, кучу поддиректории и т. д.
Если это весь репозиторий, как мне получить версию, которую я ищу? Если нет, то как мне загрузить эту конкретную версию?
15 ответов:
$ git cloneдаст вам весь репозиторий.
после клонирования, вы можете перечислить теги с
$ git tag -lа затем проверить конкретный тег:$ git checkout tags/<tag_name>еще лучше, проверьте и создайте ветку (в противном случае вы будете на ветке, названной в честь номера ревизии тега):
$ git checkout tags/<tag_name> -b <branch_name>
git clone --branch my_abc http://git.abc.net/git/abc.gitклонирует РЕПО и оставит вас на интересующем вас теге.
документация для 1.8.0 из git clone государства.
--branch также может принимать теги и отсоединяет голову при этом фиксации в результирующем репозитории.
Я не эксперт git, но я думаю, что это должно работать:
git clone http://git.abc.net/git/abc.git cd abc git checkout my_abcили
git clone http://git.abc.net/git/abc.git cd abc git checkout -b new_branch my_abcвторой вариант устанавливает новую ветвь на основе тега, что позволяет избежать "отсоединенной головы". (git-checkout manual)
каждое РЕПО git содержит всю историю ревизий, поэтому клонирование РЕПО дает вам доступ к последней фиксации, а также ко всему, что было раньше, включая тег, который вы ищете.
для проверки только заданного тега для развертывания я использую, например:
git clone -b 'v2.0' --single-branch --depth 1 https://github.com/git/git.gitэто, кажется, самый быстрый способ проверить код из удаленного репозитория, если у вас есть только интерес к самому последнему коду, а не в полном репозитории. Таким образом, он напоминает команду "svn co".
вы можете использовать git архив для загрузки tar ball для данного тега или фиксации id:
git archive --format=tar --remote=[hostname]:[path to repo] [tag name] > tagged_version.tarвы также можете экспортировать zip-архив тега.
список тэгов:
git tag 0.0.1 0.1.0экспорт тег:
git archive -o /tmp/my-repo-0.1.0.zip --prefix=my-repo-0.1.0/ 0.1.0Примечания:
- вам не нужно указывать формат. Он будет подобран по имени выходного файла.
- указание префикса приведет к экспорту кода в a каталог (если вы включаете завершающий Слэш).
использовать
--single-branchпереключатель(доступно с Git 1.7.10). Синтаксис:git clone -b <tag_name> --single-branch <repo_url> [<dest_dir>]например:
git clone -b 'v1.9.5' --single-branch https://github.com/git/git.git git-1.9.5преимущество: Git будет получать объекты и (нужно) разрешать дельты только для указанной ветви/тега - при проверке точно такого же количества файлов! В зависимости от исходного репозитория это сэкономит вам много места на диске. (Кроме того, это будет намного быстрее.)
сначала извлеките все теги в этом конкретном удаленном
git fetch <remote> 'refs/tags/*:refs/tags/*'или просто типа
git fetch <remote>затем проверьте наличие доступных тегов
git tag -lзатем переключитесь на этот конкретный тег, используя команду ниже
git checkout tags/<tag_name>надеюсь, что это поможет вам!
Я проверил git checkout documentation, Он показал одну интересную вещь:
git checkout-b
, где - это имя фиксации с чего начать новую ветку; По умолчанию HEAD поэтому мы можем упомянуть имя тега( поскольку тег-это не что иное, как имя фиксации), например:
>> git checkout-b 1.0. 2_branch 1.0.2
позже, изменить некоторые файлы
> > git push --tagsP. S: в Git вы не можете обновить тег напрямую(поскольку тег-это просто метка для фиксации), вам нужно проверить тот же тег, что и ветвь, а затем зафиксировать его, а затем создать отдельный тег.
если ваши теги сортируются с помощью linux
sortкоманда, используйте этот:git tag | sort -n | tail -1например. если
git tagвозвращает:v1.0.1 v1.0.2 v1.0.5 v1.0.4
git tag | sort -n | tail -1вывод:v1.0.5
git tag | sort -n | tail -2 | head -1вывод:v1.0.4(потому что вы попросили второй самый последний тег)
чтобы проверить тег, сначала клонируйте РЕПО, а затем введите:
git checkout v1.0.4..или любой тег, который вам нужен.
git fetch <gitserver> <remotetag>:<localtag>===================================
Я только что сделал это. Сначала я убедился, что знаю написание имени тега.
git ls-remote --tags gitserver; : or origin, whatever your remote is calledэто дало мне список тегов на моем сервере git на выбор. Оригинальный плакат уже знал имя своего тега, поэтому этот шаг не нужен для всех. Результат выглядел так, хотя реальный список был длиннее.
8acb6864d10caa9baf25cc1e4857371efb01f7cd refs/tags/v5.2.2.2 f4ba9d79e3d760f1990c2117187b5010e92e1ea2 refs/tags/v5.2.3.1 8dd05466201b51fcaf4ca85897347d82fcb29518 refs/tags/Fix_109 9b5087090d9077c10ba22d99d5ce90d8a45c50a3 refs/tags/Fix_110Я выбрал тег, который я хотел, и принес это и ничего больше, как следует.
git fetch gitserver Fix_110затем я пометил это на своей локальной машине, дав моему тегу то же имя.
git tag Fix_110 FETCH_HEADЯ не хотел клонировать удаленный репозиторий, как предлагали другие люди, поскольку проект, над которым я работаю, большой, и я хочу развиваться в хорошей чистой среде. Я чувствую, что это ближе к оригинальным вопросам "я пытаюсь выяснить, как загрузить конкретный тег", чем решение, которое предлагает клонировать весь репозиторий. Я не понимаю, почему любой должен иметь копию исходного кода Windows NT и Windows 8.1, если они хотят посмотреть исходный код DOS 0.1 (например).
Я также не хотел использовать CHECKOUT, как другие предложили. Я проверил филиал и не хотел влиять на это. Мое намерение состояло в том, чтобы принести программное обеспечение, которое я хотел, чтобы я мог выбрать что-то и добавить это в свою разработку.
вероятно, есть способ получить сам тег, а не просто копию фиксации это было помечено. Я должен был пометить принесенное обязательство сам. EDIT: Ах да, я нашел его сейчас.
git fetch gitserver Fix_110:Fix_110где вы видите двоеточие, то есть удаленное имя: локальное имя, и здесь они являются именами тегов. Это выполняется без нарушения рабочего дерева и т. д. Кажется, что он просто копирует материал с пульта дистанционного управления на локальную машину, чтобы у вас была своя копия.
git fetch gitserver --dry-run Fix_110:Fix_110С добавленной опцией -- dry-run вы можете посмотреть, что будет делать команда, если вы хотите проверить ее, что вы хотите. Так что я думаю простой
git fetch gitserver remotetag:localtagреальный ответ.
=
отдельная заметка о тегах ... Когда я начинаю что-то новое, я обычно помечаю пустой репозиторий после git init, так как
git rebase -i XXXXXтребует фиксации, и возникает вопрос "как вы перебазировать изменения, которые включают в свой первой смены программного обеспечения?- Поэтому, когда я начинаю работать, я делаю
git init touch .gitignore [then add it and commit it, and finally] git tag EMPTYт. е. создать фиксацию до моего первого реального изменения, а затем позже используйте
git rebase -i EMPTYесли я хочу перебазировать всю свою работу,в том числе в первую смену.
отрабатывая ответ Питера Джонсона, я создал себе симпатичный маленький псевдоним:
alias gcolt="git checkout \`git tag | sort -V | tail -1\`"aka 'git checkout latest tag'.
Это зависит от версии GNU sort, которая соответствующим образом обрабатывает ситуации, подобные той, на которую указал Лорангер:
v1.0.1 ... v1.0.9 v1.0.10Если вы находитесь на mac,
brew install coreutilsа затем вызовите gsort вместо этого.
Если вы хотите просмотреть версии файлов, на которые указывает тег, вы можете выполнить проверку git, хотя это помещает ваш репозиторий в состояние "отсоединенной головы", что имеет некоторые побочные эффекты:
$ git checkout 2.0.0 Note: checking out '2.0.0'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout. If you want to create a new branch to retain commits you create, you may do so (now or later) by using -b with the checkout command again. Example: git checkout -b <new-branch-name> HEAD is now at 99ada87... Merge pull request #89 from schacon/appendix-final $ git checkout 2.0-beta-0.1 Previous HEAD position was 99ada87... Merge pull request #89 from schacon/appendix-final HEAD is now at df3f601... add atlas.json and cover imageв состоянии "отсоединенная голова", если вы внесете изменения, а затем создадите фиксацию, тег останется прежним, но ваш новый фиксатор не будет принадлежать к какой-либо ветви и будет недоступен, за исключением точного хэша фиксации. Таким образом, если вам нужно чтобы внести изменения-скажем, вы исправляете ошибку в более старой версии, например, - вы обычно хотите создать ветку:
$ git checkout -b version2 v2.0.0 Switched to a new branch 'version2'Если вы сделаете это и сделаете фиксацию, ваша ветвь version2 будет немного отличаться от вашего тега v2.0.0, так как он будет двигаться вперед с вашими новыми изменениями, поэтому будьте осторожны.
Я делаю это через API github:
curl -H "Authorization: token %(access_token)s" -sL -o /tmp/repo.tar.gz "http://api.github.com/repos/%(organisation)s/%(repo)s/tarball/%(tag)s" ;\ tar xfz /tmp/repo.tar.gz -C /tmp/repo --strip-components=1 ; \
клонирование с опцией-b также помогает: git clone https://git01.codeplex.com/aspnetwebstack.git - b v2. 0
в следующем сообщении используется приведенная выше опция для загрузки asp.net mvc: http://vijayt.com/Post/Setting-up-aspnet-mvc-for-debugging-in-your-system
Comments