【问题标题】:Git: how not to push branches to remoteGit:如何不将分支推送到远程
【发布时间】:2020-07-31 14:04:29
【问题描述】:

我有两个远程 git 服务器,一个用于 dev 我推送所有内容,另一个应该仅用于 里程碑

我想做的是将所有内容提交并推送到开发服务器,并仅推送里程碑 git 上的“主”分支。

现在我在本地有两个文件夹(dev\my_projectmile\myproject),一个在 dev 服务器上跟踪,另一个由 milestone 一个跟踪。当我拥有里程碑时,我将源代码复制粘贴到“里程碑”文件夹中,然后提交并推送。

或多或少我的流程是这样的

rem go on the folder tracked on dev
cd %userdir%\dev\myproject
pushd
rem move on master branch
git checkout master
rem copy all my sources on the milestone tracked folder 
rmdir /s /q %userdir%\mile\myproject\*
copy %userdir%\dev\sources\* %userdir%\mile\myproject
cd %userdir%\mile\myproject
git add *
git commit -m "milestone commit 123"
git push

我希望不必处理两个本地副本,而是能够仅在里程碑 git 上推送主分支。

【问题讨论】:

  • git push 命令推送提交,而不是分支。然后它要求服务器根据您告诉它的名称设置一些分支。所以git push origin br1 br2 推送您拥有的任何新的提交,而他们没有,他们需要更新他们的名字br1br2 以匹配您的名字br1br2。使用git push <remote> <refspec> 精确指定要发送的提交以及您希望他们更新的名称。
  • 如果您在没有额外参数的情况下运行git push,则默认操作由您的push.default 设置控制。这个 push.default 的默认值在 Git 1.9 及更高版本中是 simple,但在非常旧的 Git 版本中是 matchingmatching 将获取您可能不想发送的分支名称,因此请考虑升级您的 Git 或将您的 push.default 设置为 simple,如果您的 Git 足够新,可以进行该设置。

标签: git git-branch


【解决方案1】:

为此存在分支概念。您可以在分支 master 旁边有许多分支,并且只进行您定义为相关的合并更改。 您的开发流程必须是这样的:

  • master// 带有生产代码
  • git checkout -b "branch-name"//从master创建一个新分支
  • 在此分支中,您开发和添加、提交和推送更改
  • 完成后,与主节点进行合并

如果你有只在本地环境中使用的文件,你可以添加.gitignore文件

【讨论】:

  • 我需要避免在开发过程中提交的内容会被上传到里程碑服务器。在分支上工作很好,但是一旦我推送所有本地提交,也会在服务器上进行
  • 您可以尝试使用.gitignore 控制添加文件,您的更改会被git忽略,并且不会上传到服务器。
【解决方案2】:

我不确定我是否了解您的整个过程,但我认为您可以通过添加多个遥控器来获得所需的内容。

git add remote <remote repo> milestone

假设origin 是您的开发服务器,milestone 是您的里程碑远程服务器。 然后,您需要在推送命令中指定远程。运行以下命令会将所有分支推送到您的开发服务器(假设您在 .gitconfig 中设置了推送默认值)。

`git push origin'

要推送到里程碑服务器,您只需要添加要推送的分支(因此您不会推送所有内容):

git push milestone master

如果您想变得更复杂,您还可以在里程碑服务器上添加一个服务器端 git 挂钩,以禁止从除 master 之外的任何分支推送。

【讨论】:

    猜你喜欢
    • 2011-09-10
    • 2016-07-08
    • 1970-01-01
    • 2018-12-22
    • 2012-07-25
    • 2015-08-14
    • 2020-12-31
    • 2016-10-25
    • 2018-09-07
    相关资源
    最近更新 更多