我的工作流程基本上是:
- 在我的台式电脑上创建一个存储库
- 对其进行一些工作并提交更改
- 克隆到我的笔记本电脑上
- 致力于此,提交更改
现在我想将更改与我的桌面同步。试git push desktop.local:~/my-repo
会失败,因为master 分支已经签出。我知道有两种解决方案:
在我的电脑上的另一个目录中创建第三个裸存储库,并从那里更新两个工作副本。但是签出两个工作副本的单个中央存储库听起来就像……SVN!除了笨拙之外,因为我不能只使用svn update
and svn commit
要与此中央存储库同步 - 需要额外的步骤才能根据提交到 Git 中工作副本的更改实际更新中央存储库。
推送到一个单独的分支并将该分支合并到我的桌面工作副本中。这还不算太糟糕,但是...
...我不明白的是:如果我只是 SSH 到台式电脑并发出git pull laptop.local:~/my-repo
, 有用!它将提交的更改拉入并更新签出的主分支,不问任何问题。为什么不能git push
自己做这个吗?
所以这是我的问题:是否有一个命令的作用与ssh
- 进入我的台式电脑并发出pull
?
问题是,当你试图推动时,你会同时做两个动作。
第一个是更新 git 树,第二个是更新笔记本电脑上的工作目录。因此,在推送过程中存在一种隐式的“签出”,而 git 拒绝这样做,这是正确的。
想象一下,如果有人真的在您的台式电脑上工作,会发生什么。
当您执行 SSH 时,情况有所不同,您位于工作目录中,您对所做的一切负责,因此可以做任何您想做的事情,删除文件,“拉取”。因此,在某种程度上,推送不允许您(默认情况下)弄乱远程计算机,这似乎很正常。
Update
如果您将 receive.denyCurrentBranch 设置为ignore,则可以推送,但您仍然必须将工作目录与代码的“最新”版本(您刚刚推送的版本)“同步”。这意味着您仍然有 2 个命令在每台计算机上运行一个
如果您确实只想运行一个命令,请使用 shell 的功能并创建一个别名,该别名可以从台式计算机执行 git pull
alias remote_pull=ssh <desktop> "cd <path>; git pull"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)