github readme.md에서 현재 분기 참조


91

내 github repo의 readme.md파일에는 Travis-CI 배지가 있습니다. 다음 링크를 사용합니다.

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

명백한 문제는 분기가 하드 코딩된다는 것입니다. 분기가 현재보고있는 분기가되도록 일종의 변수를 사용할 수 있습니까?



또한 리포지토리 부분을 변수로 만들 수도 있으므로 포크 된 리포지토리가 포크 된 원본 리포지토리의 상태를 잘못보고하지 않도록해야합니다.
EoghanM

답변:


54

내가 아는 한에서는 아니다.
GitHub 지원 확인 ( OP Joe Gatt의견을 통해 )

이를 수행하는 유일한 방법은 github의 http 참조 헤더를 사용하여 참조되는 분기를 확인한 다음 Travis CI에서 적절한 이미지를 가져 오는 내 서비스를 통해 링크를 전달하는 것입니다.

독자가 README.md.


업데이트 2016 (3 년 이상) : 아무것도 GitHub의 측면에서 변경되었습니다 동안, fedorqui 해결의 보고서 "에서 언급 Github에서에 트래비스 쉴드를 얻기가 지점의 상태를 선정 반영 하여" Andrie .
모든 지점과 각각의 TravisCI 배지를 표시하기 만하면됩니다.

두 개 또는 세 개의 지점 만 있으면 충분할 수 있습니다.


1
감사합니다, VonC. 당신이 제안 내가 github의 지원에 연락을하고 여기에 자신의 대답입니다 :
조 GATT

1
그들은 이것을 할 수 없다는 것을 확인했습니다. 그들은이 작업을 수행하는 유일한 방법은 github의 http 참조 헤더를 사용하여 참조되는 분기를 확인한 다음 Travis CI에서 적절한 이미지를 가져 오는 내 서비스를 통해 링크를 전달하는 것이라고 말했습니다.
Joe Gatt

4
방금 내 서비스를 통해 링크를 전달하려고했지만 안타깝게도 HTTP_REFERERGitHub의 README에서 이미지가로드 될 때 알 수 없습니다 . :-(
0xced mar

3
글쎄, SSL Proxied Assets 때문에 이제는 불가능하다고 생각합니다 .
0xced

2
@fedorqui 내가 아는 한 사용할 수 없습니다.
VonC

15

README.md의 Travis 행을 현재 분기로 다시 작성하는 git pre-commit hook으로이 문제를 해결했습니다. 사용 및 사전 커밋 (Python) 코드 (질문에 대한 질문)의 예는 다음과 같습니다.

용법

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$ 

사전 커밋 코드 용 Python 코드

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."

리포지토리와 github 사용자를 가져 오는 것은 리포지토리의 출처에 대한 보장 된 정보가 없기 때문에 까다 롭고 다소 취약합니다. 취약성과 함께 살 준비가 되었다면 repo-URL을 사용할 수 있습니다.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
멋지다. 나는 이것에 대해 생각했지만 github의 현재 분기를 참조하는 마법 변수를 사용하여 커밋 기록이 오염되지 않도록 할 수 있기를 바랍니다.
Andy

0

나에게 가장 좋은 해결책은 사용자 이름과 저장소 이름으로 쿼리를 보내고 모든 분기에 대한 빌드 상태가 포함 된 svg 이미지를 얻는 서버를 만드는 것이 었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.