2010-09-08 11 views
33

Có cách nào để chỉ hiển thị cấu trúc nhánh trong Git không? Có một số công cụ hiển thị các cam kết đồ họa, nhưng trong trường hợp của tôi danh sách quá dài đến mức không thể nhìn thấy cấu trúc. Tôi đoán git-log có thể là câu trả lời, nhưng tôi không thể tìm thấy bất kỳ thiết bị chuyển mạch chỉ hiển thị các cam kết phân nhánh. Điều này cùng với "--graph --branches --oneline --all" có thể làm các trick.Hiển thị cấu trúc nhánh Git

EDIT: Tôi đang tìm cách để thực hiện việc này trong Ubuntu.

+1

Bản sao có thể có của [Đồ thị chi tiết git đẹp mắt] (http://stackoverflow.com/questions/1057564/pretty-git-branch-graphs) – trblnc

Trả lời

30

Tôi không chắc chắn về những gì bạn có ý nghĩa bởi "cấu trúc nhánh".
git log có thể giúp hình dung các chi nhánh thực hiện thông qua các cam kết (Xem này blog post):

[alias] 
    lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative 

git config --global alias.lg "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative" 

alt text

Nhưng nếu bạn chỉ muốn các ngành ĐẦU khác nhau, bạn có thể thử something along the lines of:

heads = !"git log origin/master.. --format='%Cred%h%Creset;%C(yellow)%an%Creset;%H;%Cblue%f%Creset' | git name-rev --stdin --always --name-only | column -t -s';'" 

(sử dụng column command và tại đây chỉ cho các cam kết kể từ lần commit origin/master cuối cùng)

Lưu ý: Jakub Narębski đề xuất thêm tùy chọn --simplify-by-decoration, xem his answer.

+0

Điều này khá gần (giải pháp thứ hai), tôi chỉ cần thêm ngày và --branch vào lệnh. Nếu không, nó chỉ hiển thị nhánh hiện tại. Mặc dù nó vẫn không bỏ qua những cam kết không phải là đầu. Ý nghĩa của "cấu trúc nhánh" là cách nhìn từ nhánh nào được tạo ra, nhưng với lệnh này tôi có thể cuộn qua danh sách (có khoảng 350 commit) để xem cái gì đang diễn ra. – Makis

+0

@Makis: nếu bạn có lệnh cuối cùng, bạn có thể đăng câu trả lời: Tôi quan tâm (và sẽ bỏ phiếu). Sau đó, bạn thậm chí có thể chấp nhận câu trả lời của riêng bạn như một câu trả lời chính thức nếu bạn muốn. – VonC

+0

Tôi vẫn đang xem xét nó, tôi sẽ trở lại văn phòng vào ngày mai để cố gắng hiểu rõ cấu trúc. Repo đã được tạo ra với svn2git và tôi không chắc chắn 100% svn repo là do cuốn sách hoặc. – Makis

3

gitx nếu bạn đang ở trên một mac

smartgit cho mac và hay Windoze (nhưng tôi đã không sử dụng nó)

git-gui sau đó cho Ubuntu

+0

Xin lỗi, quên đề cập đến việc tôi sử dụng Ubuntu. – Makis

+0

git-gui (bạn có nghĩa là gitk, phải không?) Không làm việc cho tôi - 1. nó chỉ hiển thị các chi nhánh bạn kiểm tra, tôi wan toàn bộ cây. 2. Nó cho thấy tất cả các cam kết, tôi chỉ quan tâm đến cấu trúc nhánh. – ripper234

+0

@ ripper234 bạn có thể sử dụng 'gitk -a' để hiển thị tất cả các chi nhánh –

1

Để biết thêm thông tin về cách một nhánh đặc biệt liên quan đến các chi nhánh khác trong kho và điều khiển từ xa, bạn có thể sử dụng git wtf đó là một add trên kịch bản của William Morgan: http://git-wt-commit.rubyforge.org/

Nó tạo ra thông tin tóm tắt như sau:

$ git wtf 
Local branch: master 
[x] in sync with remote 
Remote branch: origin/master ([email protected]:willgit/mainline.git) 
[x] in sync with local 

Feature branches: 
{ } origin/experimental is NOT merged in (1 commit ahead) 
    - some tweaks i'm playing around with [80e5da1] 
{ } origin/dont-assume-origin is NOT merged in (1 commit ahead) 
    - guess primary remote repo from git config instead of assuming "origin" [23c96f1] 

(ví dụ được lấy từ URL trên).

6

giải pháp cơ bản là:

git log --graph --all 

Nếu bạn muốn nhận được thêm ưa thích:

git log --graph --all --pretty=format:"%Cblue%h%Creset [%Cgreen%ar%Creset] %s%C(yellow)%d%Creset" 
25

Có lẽ những gì bạn muốn --simplify-by-decoration lựa chọn là, xem git log tài liệu:

- -simplify-by-decoration

        Các cam kết được giới thiệu bởi một số chi nhánh hoặc thẻ được chọn.

Vì vậy, nó sẽ là

git log --graph --simplify-by-decoration --all 

hoặc sau VonC answer

git log --graph --simplify-by-decoration \ 
    --pretty=format:'%Cred%h%Creset-%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' \ 
    --abbrev-commit --date=relative 
+0

Tuyệt vời, tôi đã bỏ lỡ tùy chọn cụ thể đó. +1 – VonC

+0

@VonC: Đây là tùy chọn hoàn toàn mới; nó xuất hiện trong phiên bản git 1.6.1 –

+0

1.6.1? http://git.kernel.org/?p=git/git.git;a=tags: Thu, ngày 25 tháng 12 năm 2008, có vẻ như là một cuộc đời đối với tôi;) – VonC

6

Có lẽ tôi đang thiếu cái gì, nhưng không ai dường như đã nêu gitk --all được nêu ra.

+1

Nó cũng hiển thị tất cả các cam kết cá nhân. –

+2

Tôi vừa thử 'gitk --all --simplify-by-decoration' và hoạt động khá tốt. (Đó là với gitk được cung cấp với git 1.7.9.5) – Rhubbarb