Tham chiếu chi nhánh hiện tại trong github readme.md


91

Trong readme.mdtệp repo github của tôi, tôi có huy hiệu Travis-CI. Tôi sử dụng liên kết sau:

https://travis-ci.org/joegattnet/joegattnet_v3.png?branch=staging

Vấn đề rõ ràng là nhánh được mã hóa cứng. Có thể sử dụng một số loại biến để nhánh hiện đang được xem không?



Cũng có thể đặt phần kho lưu trữ thành một biến, để các kho lưu trữ được phân nhánh không báo cáo sai trạng thái của kho lưu trữ ban đầu mà chúng được phân tách.
EoghanM

Câu trả lời:


54

Không phải là tôi biết.
Hỗ trợ GitHub xác nhận (thông qua bình luận của OP Joe Gatt )

Cách duy nhất để làm điều này là chuyển liên kết thông qua dịch vụ của riêng tôi, dịch vụ này sẽ sử dụng tiêu đề liên kết giới thiệu http của github để xác định nhánh nào đang được tham chiếu và sau đó tìm nạp hình ảnh thích hợp từ Travis CI

Tôi thà tạo một huy hiệu Travis-CI cho mỗi nhánh để người đọc lựa chọn hoặc cân nhắc phù hợp khi nhìn thấy README.md.


Cập nhật 2016 (3 năm sau): trong khi không có gì thay đổi về phía GitHub, fedorqui báo cáo trong cách giải quyết được đề cập trong " Lấy Travis Shield trên Github để phản ánh trạng thái chi nhánh đã chọn " của Andrie .
Đơn giản chỉ cần hiển thị tất cả các chi nhánh và huy hiệu TravisCI tương ứng của họ.

Nếu bạn chỉ có hai hoặc ba chi nhánh, điều đó có thể là đủ.


1
Cảm ơn, VonC. Tôi đã liên hệ với bộ phận hỗ trợ github, như bạn đã đề xuất và đây là câu trả lời của họ:
Joe Gatt,

1
Họ khẳng định rằng điều này không thể được thực hiện. Họ cho biết cách duy nhất để làm điều này là chuyển liên kết qua dịch vụ của riêng tôi, dịch vụ này sẽ sử dụng tiêu đề liên kết giới thiệu http của github để xác định nhánh nào đang được tham chiếu và sau đó tìm nạp hình ảnh thích hợp từ Travis CI ...
Joe Gatt

4
Tôi vừa cố gắng chuyển liên kết thông qua dịch vụ của riêng mình nhưng rất tiếc là tôi không nhận được HTTP_REFERERkhi hình ảnh được tải từ README trên GitHub. :-(
0xced

3
Chà, tôi đoán bây giờ không thể đạt được điều đó vì Tài sản được ủy quyền SSL .
0xced

2
@fedorqui Theo như tôi biết, nó không có sẵn.
VonC

15

Tôi đã giải quyết vấn đề này với một hook git pre-commit để ghi lại dòng Travis trong README.md với nhánh hiện tại. Dưới đây là một ví dụ về cách sử dụng và mã cam kết trước (Python) (cho câu hỏi như đã hỏi).

Sử dụng

dandye$ git checkout -b feature123 origin/master
Branch feature123 set up to track remote branch master from origin.
Switched to a new branch 'feature123'
dandye$ echo "* Feature123" >> README.md 
dandye$ git add README.md 
dandye$ git commit -m "Added Feature123"
Starting pre-commit hook...
Replacing:
    [![Build Status](https://travis-ci.org/joegattnet/joegattnet_v3.png?branch=master)][travis]

with:
    [![Build Status](https://travis-ci.org/joegattnet/joegattnet_v3.png?branch=feature123)][travis]

pre-commit hook complete.
[feature123 54897ee] Added Feature123
 1 file changed, 2 insertions(+), 1 deletion(-)
dandye$ cat README.md |grep "Build Status"
[![Build Status](https://travis-ci.org/joegattnet/joegattnet_v3.png?branch=feature123)][travis]
dandye$ 

Mã Python cho mã cam kết trước

dandye$ cat .git/hooks/pre-commit
#!/usr/bin/python
"""
Referencing current branch in github readme.md[1]

This pre-commit hook[2] updates the README.md file's
Travis badge with the current branch. Gist at[4].

[1] http://stackoverflow.com/questions/18673694/referencing-current-branch-in-github-readme-md
[2] http://www.git-scm.com/book/en/v2/Customizing-Git-Git-Hooks
[3] https://docs.travis-ci.com/user/status-images/
[4] https://gist.github.com/dandye/dfe0870a6a1151c89ed9
"""
import subprocess

# Hard-Coded for your repo (ToDo: get from remote?)
GITHUB_USER="joegattnet"
REPO="joegattnet_v3"

print "Starting pre-commit hook..."

BRANCH=subprocess.check_output(["git",
                                "rev-parse",
                                "--abbrev-ref",
                                "HEAD"]).strip()

# String with hard-coded values
# See Embedding Status Images[3] for alternate formats (private repos, svg, etc)

#  [![Build Status](https://travis-ci.org/
#  joegattnet/joegattnet_v3.png?
#  branch=staging)][travis]

# Output String with Variable substitution
travis="[![Build Status](https://travis-ci.org/" \
       "{GITHUB_USER}/{REPO}.png?" \
       "branch={BRANCH})][travis]\n".format(BRANCH=BRANCH,
                                            GITHUB_USER=GITHUB_USER,
                                            REPO=REPO)

sentinel_str="[![Build Status]"

readmelines=open("README.md").readlines()
with open("README.md", "w") as fh:
    for aline in readmelines:
        if sentinel_str in aline and travis != aline:
            print "Replacing:\n\t{aline}\nwith:\n\t{travis}".format(
                   aline=aline,
                   travis=travis)
            fh.write(travis)
        else:
            fh.write(aline)

subprocess.check_output(["git", "add", "README.md" ])

print "pre-commit hook complete."

Việc lấy người dùng repo và github là một việc khó khăn và hơi mong manh vì không có thông tin đảm bảo về nguồn gốc của kho. Bạn có thể sử dụng repo-URL nếu bạn đang chuẩn bị để sống với sự mong manh:REPOurl=subprocess.check_output(['git','config','--local', 'remote.origin.url']).decode()
DrSAR

GITHUB_USER=re.match('.*:([a-zA-Z0-9]*)\/', REPOurl).groups()[0]
DrSAR

REPO=re.match('.*\/([a-zA-Z0-9]*).git', REPOurl).groups()[0]
DrSAR

2
Thật tuyệt, tôi đã nghĩ về điều này nhưng tôi ước mình có thể có một biến ma thuật đề cập đến nhánh hiện tại trong github để lịch sử cam kết của tôi không bị ô nhiễm.
Andy

0

Giải pháp tốt nhất cho tôi là tạo một máy chủ nơi tôi gửi một truy vấn với tên người dùng và tên đại diện và nhận được một hình ảnh svg với trạng thái xây dựng cho tất cả các chi nhánh.

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.