Зробити історію у віддаленому сховищі


206

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

Відповіді:


252
git log remotename/branchname

Відобразить журнал даної віддаленої гілки у цьому сховищі, але лише журнали, які ви "дістали" з їх сховища, до вашої особистої "копії" віддаленого сховища.

Пам’ятайте, що ваш клон сховища буде оновлювати його стан будь-яких віддалених гілок лише виконуючи це git fetch. Ви не можете підключитися безпосередньо до сервера, щоб перевірити там журнал. Завантажте стан сервера, git fetchа потім локально побачите журнал віддалених гілок.

Можливо, ще одна корисна команда могла б бути:

git log HEAD..remote/branch

який покаже вам комітети, які знаходяться у віддаленій гілці, але не у вашій поточній гілці ( HEAD).


8
"Ви не можете підключитися безпосередньо до сервера, щоб перевірити там журнал" - це питання, яке у мене виникло
Brian J

1
Я отримую лише локальні зміни ... відзначте віддалені, навіть роблячи їх раніше.
Loenix

6
Виконуючи те, що git fetchвам потрібно використовувати --allдля отримання дистанційних.
ocodo

25
Це занадто погано, тому мені доводиться клонувати об'єкти вартістю 2 Гб, щоб просто переглядати журнали фіксації?
TWiStErRob

2
Привіт @TWiStErRob, ви можете пом'якшити біль, керуючи кількістю даних, накопичених неглибоким клоном (див. --Depth в git-scm.com/docs/git-clone ), а потім керувати доступом (див. "Дрібне " в git-scm .com / docs / git-fetch ).
qneill

66

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

git remote add origin <remote reference>
git fetch
git log origin/master

2
@ user1795998 URL-адреса віддаленого сховища Git, наприкладgit://git.somedomain.tld/some/repo
gertvdijk

1
Чи не потрібно вказувати <refspec>під час отримання (або використання fetch --all), якщо ви не відстежуєте жодну гілку на пульті?
gertvdijk

1
Що ви маєте на увазі під "постачальником / діагностикою проекту"? Це папка всередині сховища? Ще одна гілка?
LopSae

1
Репозиторій може мати декілька гілок, але "проект" не є терміном, пов'язаним з git, звідси плутанина з тим, що означає "проект" у цьому випадку. І все-таки, що це стосується питання?
LopSae

1
Я не вірю, що це можливо зробити в GIT. Ви повинні клонувати це віддалене сховище, перш ніж ви зможете видати журнал git проти нього.
user959690

12

Журнал можна переглядати лише в локальному сховищі, однак він може включати витягнуті гілки всіх віддалених налаштувань.

Отже, якщо ви клонуєте репо ...

git clone git@gitserver:folder/repo.git

Це за замовчуванням до origin/master.

Ви можете додати пульт дистанційного керування для цього репо, крім originоних ДАВАЙТЕ production. З локальної папки клонування:

git remote add production git@production-server:folder/repo.git

Якщо ми колись захочемо побачити журнал, productionнам потрібно буде зробити:

git fetch --all 

Це отримує від ВСІХ віддалених (вилучення за замовчуванням без того, --allщоб отримати лише від origin)

Після отримання даних ми можемо подивитися на журнал на productionпульті, вам також доведеться вказати гілку.

git log production/master

Усі параметри працюватимуть так само, як і з журналом на локальних гілках.


12

Швидкий спосіб зробити це - клонувати за допомогою --bareключового слова та перевірити журнал:

git clone --bare git@giturl tmpdir
cd tmpdir
git log branch

11

Я не вірю, що це можливо. Я вважаю, що вам доведеться локально клонувати це віддалене репо, і виконувати git fetchйого, перш ніж ви зможете виступити git logпроти нього.


1
уявіть, що ви вже клонували репо до місцевих та внесете деякі зміни. . то ви хочете перевірити, чи хтось
погодився

2
Якщо ви зміните цю відповідь на "Неможливо", то це найкраща відповідь. Немає можливості отримати доступ до віддаленої історії фіксованих репо за допомогою віддаленого клієнта git.
qneill


2

Я не впевнений, коли фільтрування було додано, але це спосіб виключити об’єктні краплі, якщо ви хочете лише отримати історію / ref-журнали:

git clone --filter=blob:none --no-checkout --single-branch --branch master git://some.repo.git .
git log

Це ідеально . З огляду на інші відповіді, було б дивним, якби це змогло виділитися поруч із наданою відповіддю.
Ерік Кузен

0

Ви можете легко отримати журнал віддаленого сервера. Ось як:

(1) Якщо ви використовуєте git через ssh - тоді просто увійдіть на віддалений сервер, використовуючи ваш git логін та пароль - і chdir віддалену папку, де існує ваше сховище, та запустіть команду "git log" всередині вашого сховища на віддаленому сервері.

(2) Якщо ви використовуєте git за допомогою стандартного протоколу входу Unix - просто зверніться до telnet до віддаленого сервера і зробіть там протокол git.

Сподіваюсь, це допомагає.


13
Перефразовуючи, "ви не можете отримати журнал віддаленого сервера, вам потрібно увійти та отримати журнал за допомогою локального клієнта git"
qneill

Просто видаліть цю відповідь, вона не відповідає на питання, і це не так, як більшість користувачів git не мають доступу до оболонки сервера
nhed

0

Ось функція bash, яка дозволяє легко переглядати журнали на пульті. Він бере два необов’язкові аргументи. Перша - це галузь , вона за замовчуванням освоює . Другий - віддалений , він за замовчуванням здійснює інсценування .

git_log_remote() {
  branch=${1:-master}
  remote=${2:-staging}

  git checkout $remote/$branch
  git fetch
  git log
  git checkout -
}

приклади:

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