programing

Git: 가져오기 전용 리모컨을 설정하시겠습니까?

linuxpc 2023. 6. 25. 18:30
반응형

Git: 가져오기 전용 리모컨을 설정하시겠습니까?

실행할 때git remote -v원격이 구성된 Git 저장소 중 하나에서 각 원격에 fetch 및 push 사양이 모두 있음을 알 수 있습니다.

$ git remote -v
<remote-name> ssh://host/path/to/repo (fetch)
<remote-name> ssh://host/path/to/repo (push)

동료 개발자를 가리키는 원격의 경우에는 푸시할 필요가 없으며, Git는 어쨌든 베어가 아닌 저장소로의 푸시를 거부할 것입니다.푸시 주소나 기능이 없는 원격을 "fetch-only"로 구성할 수 있는 방법이 있습니까?

푸시 URL은 제거할 수 없을 것 같고, pull URL이 아닌 다른 으로 덮어쓸 수 있습니다.그래서 저는 여러분이 가장 가까이 접근할 수 있는 것은 다음과 같은 것이라고 생각합니다.

$ git remote set-url --push origin no-pushing
$ git push
fatal: 'no-pushing' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

푸시 URL을 다음으로 설정하고 있습니다.no-pushing작업 디렉토리에 동일한 이름의 폴더가 없는 한 깃을 찾을 수 없습니다.기본적으로 존재하지 않는 위치를 사용하도록 git을 강제하는 것입니다.

푸시 URL을 잘못된 것으로 변경하는 것 외에 (예:git remote set-url --push origin DISABLED), 사용할 수도 있습니다.pre-push낚싯바늘

한 가지 빠른 중지 방법git push심볼릭 링크입니다./usr/bin/false낚싯바늘이 되는 것:

$ ln -s /usr/bin/false .git/hooks/pre-push
$ git push
error: failed to push some refs to '...'

후크를 사용하면 원하는 경우 푸시를 보다 세밀하게 제어할 수 있습니다..git/hooks/pre-push.sample예를 들어, 작업 중 커밋의 푸시를 방지하는 방법에 대해 설명합니다.

특정 분기로의 푸시를 방지하거나 단일 분기로의 푸시를 제한하려면 다음 예를 참조하십시오.

$ cat .git/hooks/pre-push
#!/usr/bin/sh

# An example hook script to limit pushing to a single remote.
#
# This hook is called with the following parameters:
#
# $1 -- Name of the remote to which the push is being done
# $2 -- URL to which the push is being done
#
# If this script exits with a non-zero status nothing will be pushed.

remote="$1"
url="$2"

[[ "$remote" == "origin" ]]

여러 개의 원격이 있는 테스트 레포:

$ git remote -v
origin  ../gitorigin (fetch)
origin  ../gitorigin (push)
upstream        ../gitupstream (fetch)
upstream        ../gitupstream (push)

푸시 대상origin허용됨:

$ git push origin
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 222 bytes | 222.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To ../gitorigin
 * [new branch]      master -> master

다른 원격으로 푸시할 수 없습니다.

$ git push upstream
error: failed to push some refs to '../gitupstream'

참고:pre-push후크 스크립트는 무엇보다도 푸시가 비활성화되었다는 메시지를 stderr에게 인쇄하도록 수정할 수 있습니다.

일반적으로 "Git는 비베어 저장소로의 푸시를 거부할 것이다"라는 문구는 사실이 아닙니다.원격 리포지토리의 체크아웃된 작업 디렉터리와 동일한 분기에 있는 변경사항을 밀어넣으려는 경우에만 Git가 비어 있는 원격 리포지토리로의 밀어넣기를 거부합니다.

이 대답은 간단한 설명을 제공합니다: https://stackoverflow.com/a/2933656/1866402

(댓글을 달기에는 아직 평판이 좋지 않아 답변으로 추가합니다)

이미 원격 설정이 되어 있고 실수로 직접 밀어넣기와 같은 작업을 수행하지 못하도록 하려는 경우master또는release/production당신은 이것을 사용하여 막을 수 있습니다.git config.

# prevent pushing to branch: master
$ git config branch.master.pushRemote no_push

# prevent pushing to branch: release/production
$ git config branch.release/production.pushRemote no_push

기록을 위해.no_push특수한 이름이 아닙니다.존재하지 않는 지점의 이름일 뿐입니다.그래서 당신은 사용할 수 있습니다.$ git config branch.master.pushRemote create_a_pr_and_do_not_push_directly_to_master그리고 그것은 잘 작동할 것입니다.

추가 정보: git-config pushRemote

리포지토리를 제어할 수 있는 경우 사용 권한을 사용하여 이 작업을 수행할 수 있습니다.리포지토리를 가져오는 사용자는 마스터 리포지토리에 대한 쓰기 권한이 없어야 합니다.

언급URL : https://stackoverflow.com/questions/7556155/git-set-up-a-fetch-only-remote

반응형