我有一台服务器,我在其中设置了 Git 存储库。从我的客户那里,我可以执行
git pull origin
和
git push origin
并且我的更改已正确推送/pull 到远程 Git 服务器。我还需要能够在服务器本身上 check out 项目。我在设置时没有使用 init --bare,因为我明确希望在服务器上也有一个工作副本。
但是,当我运行 git pull 时,我收到一条消息 fatal: Where do you want to fetch from today?。我如何检查服务器上本地工作副本的最新更改?
最佳答案
修复工作副本以匹配推送的最新更改
git checkout HEAD
可能就是您要找的。p>
来自客户端的推送改变了索引而不是工作文件,所以当 git 记录向前移动时,你的工作文件没有改变。为了只删除工作文件以支持最新版本,您需要检查推送到服务器的最新版本。
...编辑:
使用两个非裸仓库
我刚刚意识到,我为您提供了理解问题的信息(索引隐式更改,但工作文件仅显式更改),但不一定是解决问题的最佳方法。这是我过去所做的,如果您不想涉及中央裸存储库,我建议您这样做:
在服务器上:
git branch staging
git checkout staging
在客户端机器上:
Hack away at some changes in master, then push to the server.
在服务器上:
git rebase master
(显式更新您的暂存分支以匹配更新后的索引。)
最后,如果您想在服务器上进行更改(错误修复,您有什么),您还需要将这些更改同步到 master,您可以通过以下方式完成:
在服务器上:
Commit changes made on the staging branch.
git rebase master
git checkout master
git rebase staging
git checkout staging
好了,master 中的每个提交都将处于暂存状态,并且在暂存分支中进行的每个提交都将是 master 中的最新提交。
即使使用非裸露的中央存储库,这种工作流程也应该适合您。本质上,您将保留服务器的 master 分支,并使暂存分支成为服务器的工作副本。
使用中央裸仓库更干净
通常,尽管网络中的 2 点看起来最简单,但拥有一个“集中式”裸存储库通常更简单,它允许您始终将推送和 pull 到该位置,而无需真正考虑它。我还推荐您可以从 github.com 获得的 Web 代码可视化的好处。出于这个原因(对于开源的东西是免费的,我将它用于我最近所做的一切)。
关于git - 当你是 git 的原始仓库时,你如何进行本地 pull ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1756600/