情况是这样的:
我在 github.com 上有一个开源应用程序的公共存储库。但是,现在我想编写一些不公开的特定代码(我可能会在我的应用程序的商业版本中使用它)。
我想我可以使用相同的存储库,并且我会在我的 git 存储库中创建一个我不会推送的“私有”分支。
但是,错误是会发生的。有没有办法禁止 git 将分支推送到远程服务器?
如果有更好的方法来处理这种情况,我当然欢迎任何建议。
以下是如何pre-push
钩子方法有效,有一个名为dontpushthis
.
创建此文件为.git/hooks/pre-push
:
#!/usr/bin/bash
if [[ `grep 'dontpushthis'` ]]; then
echo "You really don't want to push this branch. Aborting."
exit 1
fi
这是有效的,因为被推送的引用列表是通过标准输入传递的。所以这也会抓住git push --all
.
使其可执行。
在每个本地存储库中执行此操作。
当您尝试推送到该分支时,您会看到:
$ git checkout dontpushthis
$ git push
You really don't want to push this branch. Aborting.
error: failed to push some refs to 'https://github.com/stevage/test.git'
显然,这就像看起来一样简单,并且只会阻止推送名为“dontpushthis”的分支。因此,如果您试图避免直接推送到重要分支,例如master
.
如果您试图解决防止机密信息泄露的问题,这可能还不够。例如,如果您创建了一个子分支dontpushthis
,该分支将不会被检测到。您需要更复杂的检测 - 例如,您可以查看当前分支上是否存在“dontpushthis”分支上的任何提交。
更安全的解决方案
再次审视这个问题,我认为在这种情况下更好的解决方案是:
- 拥有一个公开的存储库
- 将其克隆到一个新的私有工作目录
- 拆下遥控器(
git remote rm origin
)从该工作目录。
- 要合并公共更改,只需执行以下操作
git pull https://github.com/myproj/mypublicrepo
这样,私有存储库工作目录就永远没有可以推送到的任何地方。从本质上讲,你有一个将公共信息转为私人信息的单向阀,但不能返回。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)