繁体   English   中英

如何配置git以避免意外的git push

How to configure git to avoid accidental git push

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

git clone之后,新仓库中的配置如下所示:

remote.origin.url=<some url>
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master

然后,我可以执行“ git pull”和“ git push”。 但是我只对“ git pull”感兴趣,因为我想推送到另一个仓库中。

我可以做的一件事是:

git add remote repo-for-push <some other url>
git push repo-for-push master

但是我想将git配置为使用默认的和不同的存储库来进行推拉,即:

git pull # pulls from origin
git push # pushes into repo-for-push, avoiding accidental push into the origin

如何配置? 提前致谢。

编辑:
基本上,我想将默认的推送回购设置为不同于默认的提取/拉回购。

5 个回复

看起来像

git config remote.origin.receivepack /bin/false

使推送到远程源失败。

1.6.4版中,Git获得了使用remote.name.pushurl配置设置从一个URL进行远程提取并推送到另一个URL的remote.name.pushurl 我可以想像如果推送存储库不跟踪请求存储库,那么奇怪的行为,但是我怀疑Git会尝试从当前/跟踪/匹配分支快速推送推送存储库,而不考虑它是什么。询问同名遥控器时,将拉动。

例如,如果您想通过匿名git协议进行拉取,但通过SSH进行推送(也许您需要SecurID令牌中的值或进行身份验证的内容):

[remote "myremote"]
    url = git://server/path
    pushurl = user@server:/path

我不确定您今天是否可以在git中实际执行此操作。 git-fetch(在builtin-fetch.c中)和git-push(在builtin-push.c中)的实现都调用内部函数remote_get(NULL)来标识要从中拉入/推入的默认存储库。

一种选择是创建一个别名,以指定所需的仓库。 例如:

git config --add alias.mypush "push repo-for-push"

然后,您可以:

git mypush

推动您想要的回购。 当然,不完全是您想要的。 (您也可以将--repo参数考虑为push;请参见http://kerneltrap.org/mailarchive/git/2008/10/7/3537694了解有关--repo参数的最新文档更新。)

如果您可以从另一个分支进行所有推送,那么我认为您可以将该分支配置为拥有自己的独立存储库以推送到:

git checkout master
git branch outbound
git remote add destination <some url>
git config branch.outbound.remote destination

我没有尝试过,您可能需要做更多的工作才能创建一个完整的解决方案。 如果您必须从主推,它也可能对您不起作用。

将“ git”命令包装在使用push参数的内容中。 我写了这样的话:

~$ cat /usr/local/bin/git
#!/bin/bash

# git wrapper
# prevents pushing to repository

declare -a args
declare msg=''
while [ $# -gt 0 ]
do
    if [ "$1" != 'push' ]; then
        args=( "${args[@]}" "$1" )
    else
        msg="No pushing"
    fi
   shift
done

if [ ${#msg} -gt 0 ]; then
    echo "$msg"
fi
/usr/bin/git "${args[@]}"

只要确保在“真实” git命令之前的路径中包含包装命令即可。

1 删除提交及其历史记录,以避免在git中配置钩子

我在提交中输入了错误的消息,并在关闭已配置的挂钩时将其推送到我的远程分支。 但是,我需要更改提交消息并推送到远程分支。 当我修改并将代码推送到分支时,它位于错误消息提交的顶部。 我需要从历史记录中删除该提交,并在远程中用正确的消息替换最新的提交。 正确的提交消息:工单#123我的提交 ...

2 避免意外删除git存储库的权限

我们在文件系统路径上有一些git存储库。 所有这些存储库上的许可为755。 存储库已使用以下方式共享: git init --shared = 0775 之所以需要这样做,是因为存储库与属于同一unix组的多个用户共享。 用户使用文件系统路径克隆存储库: git ...

3 为了避免意外的合并,git-flow中止了

我们正在使用git-flow 。 我们处理几个不同的功能分支并不断收到此错误: 通常,恢复到早期版本的开发工作。 然而,这是一种痛苦。 因此问题: 如何在将来避免此消息? ...

4 Git合并:是否可以避免非快进文件的自动合并?

当我进行git merge我希望只有可以快进的文件(即自上次共同修订以来仅在合并的一个分支上发生更改的文件)被自动合并,而所有其他文件(即在两个分支上都发生了变化,即使在不同的行上)被标记为冲突。 我环顾四周,但似乎没有“简单”的方法(例如传递给git merge的选项)来做到这一点。 这里有一个 ...

2015-10-30 01:29:41 1 1786   git/ merge
5 有什么方法可以避免在git中提交调试器?

我遇到了一种情况,其中我在git中提交了调试器,然后将其推到GitHub上。 有什么办法可以避免这种情况? 例如,每当我提交一些包含debugger代码时, git就会向我发出某种警告,指出您的提交包含调试器 我访问了一些与此相关的网站和要点,告诉我们在此处添加git挂钩以避免 ...

6 Git:在我意外更改后,如何重置配置参数?

我正在使用bash中的tab完成来探索git config选项,并且没有真正思考,我这样做了: 现在我的全局签名密钥设置为--help 。 捂脸。 有没有一种通用的方法可以找出过去哪些配置设置,或者在某个项目中我可以查看哪些内容可以设置为什么? 我有一个Github帐户,也许我可以 ...

2013-05-27 22:05:23 1 39862   git
7 git意外地跟踪了配置文件

以下面的场景为例: 您不小心跟踪并提交了配置文件 每个开发环境都应该有自己的特定配置文件,因此在git add之前你应该有.gitignore 你很久没有意识到了 提交 如果你曾经重置或挑选回C,D或E,它将覆盖配置文件。 无论如何通过对它们应用B ...

8 与git-push混淆

我面对的情况令我感到困惑,但我想答案很简单,就是我看不见...希望有人能帮助我 我有一个git回购。 git-status说我有4个提交队列: 所以我做git-push( git push origin ),然后看起来还不错,也就是说,我没有什么要推送的。 但是,当我在另一个目 ...

2010-11-23 15:03:49 2 1883   git
9 git如何禁用push [duplicate]

这个问题在这里已有答案: Git:设置一个只提取的遥控器? 4个答案 我正在使用git,我正在进行我的开发工作,我不想推,即使是错误的。 是否有一种方法可以在某些本地存储库中禁用推送。 一种方法是重命名分支,另一种方法是撤消推送,如果一个人错误地做,但我希望应 ...

2012-04-21 15:27:26 3 50515   git/ push
10 Git 的@{upstream} 和@{push} 有什么不同?

Git 分支的@{upstream}和较新的@{push}什么区别? 据我了解, @{upstream}是分支的上游跟踪引用, @{push}是push将推送到的引用。 就我的直觉而言,它们是同一回事。 检查几个方便的分支git rev-parse @{upstream}与git rev-par ...

2020-01-29 15:46:01 1 73   git
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM