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
'programing' 카테고리의 다른 글
트랜잭션 주석이 Spring Boot에서 작동하지 않음 (0) | 2023.06.25 |
---|---|
SQL Profiler에서 트리거 실행을 모니터링하는 방법 (0) | 2023.06.25 |
R이 할 수 없는 MATLAB이 할 수 있는 것은 무엇입니까? (0) | 2023.06.25 |
rxjs의 flatMap, mergeMap, switchMap 및 concatMap? (0) | 2023.06.25 |
루비에서 HTML 엔티티를 인코딩/디코딩하려면 어떻게 해야 합니까? (0) | 2023.06.20 |