>

다음 Git 명령을 수행 할 쉘/bash 스크립트를 찾고 있습니다 :

    원격의 각 지점에 대한
  • :
    • 원산지/마스터 병합

파이썬을 사용해서 할 수있었습니다 :

tmp_folder = "tmp-clone"
if os.path.exists(tmp_folder):
    shutil.rmtree(tmp_folder)
g = git.Git()
g.execute(["git", "clone", "...", tmp_folder])
g = git.Git("tmp-clone")
branches = g.execute(["git", "branch", "-r"])    
matches = [item for item in re.findall(r"origin/([\w-]+)", branches) if item not in ("HEAD", "master")]
for branch in matches:
    print("merge master -> %s" % branch)
    g.execute(["git", "checkout", branch])
    g.execute(["git", "merge", "master"])
    g.execute(["git", "push"])

그러나 나는 파이썬없이 이것을하려고합니다. 누군가? 내 첫 추측은

for BRANCH in $(git branch -r); (...); done

그러나 pyzwyz  출력

git branch -r

그리고 (이 예에서) 나는

origin/HEAD ->origin/master

origin/master

origin/some_branch_a

origin/some_branch_b

에만 관심이 있습니다.  그리고 some_branch_a  (따라서 파이썬의 정규 표현식) 따라서 bash 스크립트에는 일종의 정규 표현식이 필요합니다. 그러나 내 bash 스크립팅 기술은 상당히 제한적입니다.

some_branch_b

참고 : 충돌이 발생하지 않는다고 가정하십시오.

for BRANCH in $(git branch -r); if $BRANCH matches "origin/([\w-]+)" ??? git checkout $BRANCH; git merge origin/master; git push $BRANCH; fi done

  • 답변 # 1

    파이썬 코드는 텍스트 설명이 제안하는 것을하지 않습니다. 다음은 설명이 아니라 코드를 기반으로합니다.

    <시간>

    git for-each-ref 사용 네임 스페이스의 일부에서 참조를 찾습니다. 여기서 네임 스페이스는 refs/remotes/origin 입니다. :

    git for-each-ref --format='%(refname:short)' refs/remotes/origin |
    while read refname; do
        ...
    done
    
    

    와이즈 비즈 벗기 :

    origin/
    
    

    name=${refname#origin/} 확인 및 삭제  그리고 HEAD  당신이 그들을 조작하고 싶지 않기 때문에 :

    master
    
    

    (또는 case "$name" in HEAD|master) continue;; esac 와 동일)  원하는 경우).

    이제 if 를 사용할 준비가되었습니다 git checkout $namegit merge master  이전과. 하나의 최종 git push 를 수행하는 것이 더 효율적입니다.  이름이 다르지만 조금 더 복잡합니다.

    스크립트가 실제로 준비되어 있는지 확인하려면 실제로 수행하기 전에 수행 한 명령을 반영하십시오.

    git push
    
    

    참고 : 위의 내용은 모두 테스트되지 않았습니다.

    git for-each-ref --format='%(refname:short)' refs/remotes/origin | while read refname; do name=${refname#origin/} case "$name" in HEAD|master) continue;; esac echo git checkout $name echo git merge master echo git push $name done

  • 이전 AngularJS에서 MySQL 이미지를 표시하는 방법은 무엇입니까? (AngularJs-> Nodejs-> abccom-> mysql)
  • 다음 php - 입력 검증을 통한 PRG 패턴 기술