Git - 将存储库与 checkout 分支同步的最简单方法

标签 git

我的工作流程基本上是:

  • 在我的台式电脑上创建一个 repo
  • 做一些工作并提交更改
  • 克隆到我的笔记本电脑上
  • 致力于此,提交更改

现在我想将更改与我的桌面同步。尝试 git push desktop.local:~/my-repo 会失败,因为 the master branch is already checked out .我知道有两种解决方案:

  1. 在我 PC 的另一个目录中创建第三个裸存储库,并从那里更新两个工作副本。但是一个带有两个工作副本的中央存储库听起来像...... SVN!除了笨拙之外,因为我不能只使用 svn updatesvn commit 来与这个中央存储库同步——需要额外的步骤来实际更新中央 repo 提交的更改Git 中的工作副本。

  2. 推送到一个单独的分支并将该分支 merge 到我的桌面工作副本中。这还不算太糟糕,但是……

...我不明白的是:如果我只是通过 SSH 连接到桌面 PC 并发出 git pull laptop.local:~/my-repo,它就可以工作了!它 pull 已提交的更改并更新 checkout 的主分支,不问任何问题。为什么 git push 不能自己做?

所以这是我的问题:是否有一个命令与 ssh 的工作方式相同 - 进入我的台式电脑并发出 pull

最佳答案

问题是当你试图 push 你同时做 2 个 Action 时。 第一个是更新 git 树,第二个是更新笔记本电脑上的工作目录。所以在推送过程中有一种隐式的“checkout ”,而 git 拒绝这样做,这是正确的。 想象一下,如果有人真的在您的台式 PC 上工作,将会发生什么。 当你使用 SSH 时,事情就不同了,你在你的工作目录中,你对你所做的一切负责,因此,你可以做任何你想做的事,删除文件,“pull ”。所以这在某种程度上看起来很正常,推送不允许您(默认情况下)搞砸远程计算机。

更新

如果您将 receive.denyCurrentBranch 设置为 ignore ,您可以推送,但您仍然必须将您的工作目录与“最新”版本的代码(您刚刚推送的代码)“同步”。这意味着您仍然有 2 个命令可以在每台计算机上运行一个

如果您真的只想运行一个命令,请使用 shell 的强大功能并创建一个别名,该别名可以从桌面计算机执行 git pull

alias remote_pull=ssh <desktop> "cd <path>; git pull"

关于Git - 将存储库与 checkout 分支同步的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4011089/

上一篇:git-archive 与 cp

下一篇:从分支到生产

相关文章:

git - 这个 git reset 命令中的 ~1 是什么意思?

git - 我可以将我的本地 Github 存储库与 WAMP localhost 文件夹结合起来吗?

Git 问责制

Git 分支未显示 [gone] 缺少 Remote

git - 如何在本地和远程删除 Git 分支?

git - 如何显示我当前工作目录和我上次提交的差异?

git - 如何让 git 通过代理和 IntelliJ Idea 工作?

git - 在 Docker 中的 Jenkins 构建脚本中调用 Git

git - 在 Git 中 rebase 时的 "new file"与 "added by them"

git - 更改 GIT 中的所有提交日期