Как получить доступ к полному источнику старого коммита в BitBucket?


227

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


1
Какой новый формат? Вы используете Mercurial или Git? Просто используйте клиенты Mercurial или Git для обновления до старой версии.
— Эрно

Ответы:


369

Я понимаю, что вы хотите загрузить старую версию через веб-интерфейс BitBucket без использования клиента Mercurial / Git.

Проверьте этот связанный вопрос . В комментариях кто-то говорит, что сделать это невозможно. К счастью, это не совсем так.

Навигация по страницам проекта BitBucket, я не нашел ссылки для загрузки произвольной версии. Есть ссылки для скачивания определенных тегов в формате:

https://bitbucket.org/owner/repository/get/v0.1.2.tar.gz

Но, немного изменив URL выше, изменив имя тега на хеш коммита, например:

https://bitbucket.org/owner/repository/get/A0B1C2D.tar.gz

Вы можете скачать конкретную версию.

Как отметил Rakka Rage в комментарии, замена .tar.gzтакже .zipработает.


Могу ли я использовать ссылку выше в терминале Android Studio для клонирования коммита? Если да, не могли бы вы предоставить основной код терминала?
— tccpg288

1
Я хотел бы, чтобы они показали это на своем сайте, чтобы это было очевидно.
— катится

1
Почему это не актуально? Я только что проверил его снова (2018-08-06), и он все еще работает. Может быть, проблема с «внутренними» серверами BitBucket? Я проверил это на сервере bitbucket.org .
— Руди Матела

должно быть api.bitbucket.orgсейчас
— Александр Миллс

1
Могу подтвердить, что это все еще работает только сbitbucket.org
— Вели

202

Я пытался выяснить, возможно ли просмотреть код предыдущего коммита, как вы можете на GitHub, и это привело меня сюда. Я использовал информацию, которую нашел здесь, и, поигравшись с URL, я действительно нашел способ просмотреть код старых коммитов.

Когда вы просматриваете свой код, URL выглядит примерно так:

https://bitbucket.org/user/repo/src/

и добавив в конце хеш коммита, вот так:

https://bitbucket.org/user/repo/src/a0328cb

Вы можете просмотреть код в точке этого коммита. Я не понимаю, почему нет выпадающего списка для прямого выбора коммита, функция уже есть. Странный.


2
Это именно то, что мне было нужно. Прямая ссылка с сайта Bitbucket на этот URL крайне отсутствует.
— Джонни Ошика

Увы, это не работает. Вернее работать, но частично. Например, вы можете просматривать, https://bitbucket.org/lyro/evil/src/8cbfd51но если вы введете hg clone https://bitbucket.org/lyro/evil/src/8cbfd51, вы получите случайную ревизию, возможно, самую последнюю.
— Привет, Ангел,

Нашел обходной путь, этоhg clone -r8cbfd51 https://bitbucket.org/lyro/evil/src/
— Привет-Ангел

3
Для тех, кто не любит копировать + вставлять: перейдите к определенному коммиту, URL будет примерно таким https://bitbucket.org/user/project/commits/0000000000000000000000000000000000000000?at=master. Теперь просто измените commitsURL-адрес на srcи вы просматриваете полный исходный код этого коммита!
— Питер

176

Шаг 1

Шаг 1


Шаг 2

Шаг 2


Шаг 3

Шаг 3


Шаг 4

Шаг 4


Заключительный этап

Заключительный этап


2
@ManojG Вот один из меня. Таким образом, очевидно, есть способ добраться до целого дерева при определенном коммите, хотя и довольно запутанным способом.
— Малкольм

2
ЛЮБЛЮ ЭТОТ ОТВЕТ. Примечание: вы также можете перейти к файлу и использовать раскрывающийся список. СПАСИБО!
— mattdlockyer

3
Более удивительным, чем этот ответ, является тот факт, что мы не можем сделать это одним нажатием кнопки ... некоторые вещи действительно удивительны ...
— Нуно Гонсалвеш

этот шаг не решил для меня, что дало результаты: ответ от @mattdlockyer, выберите файл, нажмите на выпадающий список, выберите более старый коммит, а затем вернитесь к базовой ссылке репо, как последнее изображение из сообщения Оскара
— user2582318

1
Все это работает, но при загрузке это всегда последний коммит. Я делаю это неправильно или это так?
— Джей Мехта

29

На всякий случай, если кто-нибудь в моей лодке, где ни один из этих ответов не работал точно, вот что я сделал

Возможно, наш собственный сервер Bitbucket настроен немного иначе, чем большинство, но вот URL-адрес, на который я бы обычно шел, чтобы просмотреть файлы в основной ветке:

https://<BITBUCKET_URL>/projects/<PROJECT_GROUP>/repos/<REPO_NAME>/browse

Если я выберу ветвь, отличную от основной, из выпадающего меню, я получу следующее:

https://<BITBUCKET_URL>/projects/<PROJECT_GROUP>/repos/<REPO_NAME>/browse?at=refs%2Fheads%2F<BRANCH_NAME>

Я попытался сделать это, и это сработало:

https://<BITBUCKET_URL>/projects/<PROJECT_GROUP>/repos/<REPO_NAME>/browse?at=<COMMIT_ID>

Теперь я могу просмотреть весь репо, как это было во время этого коммита.


6
Этот ответ единственный, который действительно работает. Более популярные из них, похоже, относятся к более старым версиям Bitbucket
— Клас Меллборн

9

Отличные ответы пару лет назад. Теперь Bitbucket сделал это проще.

Отметьте коммит, который вы хотите загрузить (как упомянуто в ответе Руди Мателы).

Затем перейдите в раздел «Загрузки» и перейдите на вкладку «Теги», и вы получите несколько вариантов загрузки.

Тег Загрузки


1
Это был самый простой путь. Для тех, кто не смог получить проблемы с тегами, нажмите на конкретную фиксацию, и в верхнем правом углу вы увидите источник просмотра, ветвь, фиксацию и теги. Добавьте туда свой тег, затем перейдите к его загрузке.
— PGMacDesign

8

Для записи, вы также можете разыграть URL-адреса следующим образом:

При просмотре последнего источника, у вас есть что-то вроде: https://bitbucket.org/my/repo/src/latestcommithash/my.file?at=master

Просто измените хеш коммита и удалите параметр GET: https://bitbucket.org/my/repo/src/wantedcommithash/my.file

Добрался до +1 @ Hein A. Grønnestad выше: все работает, очень интересно, почему в GUI нет ничего, чтобы использовать его.


3
  1. Самый простой способ - нажать на этот коммит и добавить к нему тег. Я включил тег 'last_commit' с этим коммитом

  2. Затем перейдите к загрузкам в левом углу боковой панели в ведре. Нажмите на загрузку в левой части

  3. Теперь нажмите на теги в навигационной панели и загрузите zip из пользовательского интерфейса. Найдите свой тег и скачайте zip

1

Вы можете просмотреть исходный файл до определенного коммита, добавив его ?until=<sha-of-commit>в URL (после имени файла).


1

Я знаю, что уже слишком поздно, но с API 2.0 вы можете сделать

из командной строки с помощью:

curl https://api.bitbucket.org/2.0/repositories/<user>/<repo>/filehistory/<branch>/<path_file>

или в php с:

$data = json_decode(file_get_contents("https://api.bitbucket.org/2.0/repositories/<user>/<repo>/filehistory/<branch>/<path_file>", true));

тогда у вас есть история вашего файла (от самого последнего коммита до самого старого):

{
"pagelen": 50,
"values": [
    {
      "links": {
        "self": {
          "href": "https://api.bitbucket.org/2.0/repositories/<user>/<repo>/src/<hash>/<path_file>"
        },
        "meta": {
          "href": "https://api.bitbucket.org/2.0/repositories/<user>/<repo>/src/<HEAD>/<path_file>?format=meta"
        },
        "history": {
          "href": "https://api.bitbucket.org/2.0/repositories/<user>/<repo>/filehistory/<HEAD>/<path_file>"
        }
      },
      "commit": {
        "hash": "<HEAD>",
        "type": "commit",
        "links": {
          "self": {
            "href": "https://api.bitbucket.org/2.0/repositories/<user>/<repo>/commit/<HEAD>"
          },
          "html": {
            "href": "https://bitbucket.org/<user>/<repo>/commits/<HEAD>"
          }
        }
      },
      "attributes": [],
      "path": "<path_file>",
      "type": "commit_file",
      "size": 31
    },
    {
      "links": {
        "self": {
          "href": "https://api.bitbucket.org/2.0/repositories/<user>/<repo>/src/<HEAD~1>/<path_file>"
        },
        "meta": {
          "href": "https://api.bitbucket.org/2.0/repositories/<user>/<repo>/src/<HEAD~1>/<path_file>?format=meta"
        },
        "history": {
          "href": "https://api.bitbucket.org/2.0/repositories/<user>/<repo>/filehistory/<HEAD~1>/<path_file>"
        }
      },
      "commit": {
        "hash": "<HEAD~1>",
        "type": "commit",
        "links": {
          "self": {
            "href": "https://api.bitbucket.org/2.0/repositories/<user>/<repo>/commit/<HEAD~1>"
          },
          "html": {
            "href": "https://bitbucket.org/<user>/<repo>/commits/<HEAD~1>"
          }
        }
      },
      "attributes": [],
      "path": "<path_file>",
      "type": "commit_file",
      "size": 20
    }
  ],
  "page": 1
}

где values> links> selfпредоставляет файл в данный момент в истории , которую вы можете получить его с помощью curl <link>или file_get_contents(<link>).

В конце концов, из командной строки вы можете отфильтровать с помощью:

 curl https://api.bitbucket.org/2.0/repositories/<user>/<repo>/filehistory/<branch>/<path_file>?fields=values.links.self

в php просто сделайте foreachцикл в массиве $data.

Примечание: если <path_file>есть, /вы должны конвертировать в %2F.

Смотрите документ здесь: https://developer.atlassian.com/bitbucket/api/2/reference/resource/repositories/%7Busername%7D/%7Brepo_slug%7D/filehistory/%7Bnode%7D/%7Bpath%7D

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.