program story

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

inputbox 2020. 7. 27. 07:56
반응형

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


git remote -v리모컨이 구성된 Git 리포지토리 중 하나에서 실행할 때 각 리모컨에 페치 및 푸시 사양이 모두 있음을 알 수 있습니다.

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

피어 개발자를 가리키는 리모트의 경우 푸시 할 필요가 없으며 Git은 어쨌든 비 저장소 리포지토리에 푸시하지 않습니다. 푸시 주소 나 기능없이 이러한 리모트를 "페치 전용"으로 구성 할 수있는 방법이 있습니까?


푸시 URL을 삭제할 수 있다고 생각하지 않으며 풀 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을 찾을 수 없습니다. 본질적으로 git이 존재하지 않는 위치를 사용하도록 강요하고 있습니다.


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

중지하는 빠른 방법 중 하나 는 후크 git push가되도록 symlink /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'

Note that the pre-push hook script can be modified to, among other things, print a message to stderr saying the push has been disabled.


The general statement "Git will refuse to push to a non-bare repository" is not true. Git will only refuse to push to a non-bare remote repository if you are attempting to push changes that are on the same branch as the remote repository's checked-out working directory.

This answer gives a simple explanation: https://stackoverflow.com/a/2933656/1866402

(I am adding this as an answer because I don't have enough reputation to add comments yet)


If you have control over the repository, you can achieve this by making use of permissions. The user who is fetching repository shouldn't have write permissions on master repository.

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

반응형