当我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)
Run Code Online (Sandbox Code Playgroud)
对于指向同行开发人员的遥控器,没有必要推送,Git无论如何都会拒绝推送到非裸机库.有没有办法将这些遥控器配置为"仅提取"而没有推送地址或功能?
Dan*_*man 172
我不认为您可以删除推送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
Run Code Online (Sandbox Code Playgroud)
您正在设置推送URL no-pushing
,只要您的工作目录中没有相同名称的文件夹,git将无法找到.你基本上是强迫git使用一个不存在的位置.
Rod*_*lho 11
除了将推送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 '...'
Run Code Online (Sandbox Code Playgroud)
如果需要,使用钩子可以更精细地控制推动.有关.git/hooks/pre-push.sample
如何防止推送正在进行的提交的示例,请参阅参考资料.
一般的说法“Git 将拒绝推送到非裸存储库”是不正确的。仅当您尝试推送与远程存储库的签出工作目录位于同一分支上的更改时,Git 才会拒绝推送到非裸远程存储库。
这个答案给出了一个简单的解释:https ://stackoverflow.com/a/2933656/1866402
(我将其添加为答案,因为我还没有足够的声誉来添加评论)