Cam kết lịch sử trên kho lưu trữ từ xa


205

Tôi đang cố gắng truy cập lịch sử cam kết của một chi nhánh trên một kho lưu trữ từ xa. Tôi đã xem tài liệu nhưng không thể tìm thấy bất kỳ thông tin quan trọng nào về cách truy cập lịch sử cam kết của một đại diện từ xa bằng ứng dụng khách git cục bộ của tôi.

Câu trả lời:


252
git log remotename/branchname

Sẽ hiển thị nhật ký của một nhánh từ xa nhất định trong kho lưu trữ đó, nhưng chỉ các nhật ký mà bạn đã "tìm nạp" từ kho lưu trữ của chúng sang "bản sao" cá nhân của kho lưu trữ từ xa.

Hãy nhớ rằng bản sao của kho lưu trữ của bạn sẽ cập nhật trạng thái của bất kỳ nhánh từ xa nào chỉ bằng cách thực hiện git fetch. Bạn không thể kết nối trực tiếp với máy chủ để kiểm tra nhật ký ở đó, những gì bạn làm là tải xuống trạng thái của máy chủ git fetchvà sau đó xem nhật ký của các chi nhánh từ xa.

Có lẽ một lệnh hữu ích khác có thể là:

git log HEAD..remote/branch

sẽ cho bạn thấy các cam kết nằm trong nhánh từ xa, nhưng không phải trong nhánh hiện tại của bạn ( HEAD).


8
"Bạn không thể kết nối trực tiếp với máy chủ để kiểm tra nhật ký ở đó" - đó là vấn đề tôi gặp phải
Brian J

1
Tôi chỉ nhận được các thay đổi cục bộ ... lưu ý các thay đổi từ xa, thậm chí thực hiện tìm nạp trước đó.
Loenix

6
Khi làm một git fetchbạn cần sử dụng --allđể tìm nạp từ xa.
ocodo

25
Điều đó thật tệ, vì vậy tôi phải sao chép các đối tượng trị giá 2GB chỉ để xem qua nhật ký cam kết?
TWiStErRob

2
Xin chào @TWiStErRob, bạn có thể giảm đau bằng cách quản lý lượng dữ liệu được tìm nạp bằng một bản sao nông (xem --depth trong git-scm.com/docs/git-clone ), sau đó quản lý tìm nạp bằng (xem "nông" trong git-scm .com / docs / git-fetch ).
qneill

65

Lưu ý "origin" bên dưới được sử dụng để thể hiện thượng nguồn của một kho lưu trữ nhân bản, thay thế "origin" bằng một tên mô tả cho repo từ xa. "tham chiếu từ xa" có thể sử dụng cùng định dạng được sử dụng trong lệnh clone.

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

2
@ user1795998 Các kho từ xa Git URL, ví dụ:git://git.somedomain.tld/some/repo
gertvdijk

1
Bạn không cần chỉ định <refspec>khi tìm nạp (hoặc sử dụng fetch --all) nếu bạn không theo dõi bất kỳ chi nhánh nào trên điều khiển từ xa?
gertvdijk

1
Bạn có ý nghĩa gì với "nhà cung cấp dự án / diag"? Có phải đó là một thư mục bên trong kho lưu trữ? Chi nhánh khác?
LopSae

1
Một kho lưu trữ có thể có nhiều nhánh, nhưng "dự án" không phải là một thuật ngữ liên quan đến git, từ đó có sự nhầm lẫn với "dự án" nghĩa là gì trong trường hợp này. Tuy nhiên, những gì sẽ có liên quan đến câu hỏi?
LopSae

1
Tôi không tin có thể làm điều này trong GIT. Bạn phải sao chép kho lưu trữ từ xa đó trước khi bạn có thể đưa ra một bản ghi git chống lại nó.
dùng959690

12

Bạn chỉ có thể xem nhật ký trên một kho lưu trữ cục bộ, tuy nhiên có thể bao gồm các nhánh được tìm nạp của tất cả các điều khiển từ xa mà bạn đã thiết lập.

Vì vậy, nếu bạn nhân bản một repo ...

git clone git@gitserver:folder/repo.git

Điều này sẽ mặc định origin/master.

Bạn có thể thêm một điều khiển từ xa vào repo này, ngoài originviệc thêm production. Từ trong thư mục bản sao cục bộ:

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

Nếu chúng ta muốn xem nhật ký của productionchúng ta sẽ cần phải làm:

git fetch --all 

Điều này tìm nạp từ TẤT CẢ các điều khiển từ xa (tìm nạp mặc định mà không --allchỉ tìm nạp từ origin)

Sau khi tìm nạp, chúng ta có thể xem nhật ký trên productionđiều khiển từ xa, bạn cũng sẽ phải chỉ định chi nhánh.

git log production/master

Tất cả các tùy chọn sẽ hoạt động như họ làm với đăng nhập vào các chi nhánh địa phương.


12

Một cách nhanh chóng để làm điều này là sao chép bằng cách sử dụng --baretừ khóa và sau đó kiểm tra nhật ký:

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

11

Tôi không tin điều này là có thể. Tôi tin rằng bạn phải sao chép repo từ xa đó cục bộ và thực hiện git fetchtrên nó trước khi bạn có thể đưa ra một git logchống lại nó.


1
hãy tưởng tượng bạn đã sao chép repo sang địa phương và thực hiện một số thay đổi. . sau đó bạn muốn kiểm tra xem có ai đã cam kết với repo từ xa không
Chhorn Elit

2
Nếu bạn thay đổi câu trả lời này thành "Không thể" thì đây là câu trả lời tốt nhất. Không có cách nào để truy cập lịch sử cam kết của repo từ xa bằng ứng dụng khách git từ xa.
qneill


2

Tôi không chắc chắn khi lọc được thêm nhưng đó là cách để loại trừ các đốm màu đối tượng nếu bạn chỉ muốn tìm nạp lịch sử / nhật ký ref:

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

Điều này là hoàn hảo . Đưa ra các câu trả lời khác, sẽ thật tuyệt vời nếu điều này có thể nổi bật bên cạnh câu trả lời được cung cấp.
Eric Cousineau

0

Bạn có thể dễ dàng lấy nhật ký của máy chủ từ xa. Đây là cách thực hiện:

.

(2) Nếu sử dụng git qua giao thức đăng nhập tiêu chuẩn của Unix - thì chỉ cần telnet đến máy chủ từ xa của bạn và thực hiện nhật ký git ở đó.

Hi vọng điêu nay co ich.


13
Để viết lại, "bạn không thể lấy nhật ký của máy chủ từ xa, bạn phải đăng nhập và lấy nhật ký bằng ứng dụng khách git cục bộ"
qneill

Chỉ cần xóa câu trả lời này, nó không trả lời câu hỏi và nó không phải là cách mà hầu hết người dùng git không có quyền truy cập shell máy chủ
ngày

0

Đây là một hàm bash giúp dễ dàng xem các bản ghi trên một điều khiển từ xa. Phải mất hai đối số tùy chọn. Cái đầu tiên là nhánh , nó mặc định là master . Cái thứ hai là cái điều khiển , nó mặc định để dàn dựng .

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

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

ví dụ:

 $ git_log_remote
 $ git_log_remote development origin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.