我有一台服务器,我在其中设置了一个Git存储库。从我的客户,我可以执行
git pull origin
和
git push origin
我的更改被正确地推送/拉到远程Git服务器。我还需要能够在服务器上签出项目。我在设置时没有使用 init --bare ,因为我明确希望在服务器上也有一个工作副本。
然而,当我运行 git pull 时,我收到一条消息致命:你想从今天的哪个位置获取?。如何在服务器上查看我本地工作副本的最新更改?
答案 0 :(得分:8)
git checkout HEAD
你可能正在寻找。
来自客户端的推送更改索引而不是工作文件,因此您可以在事物的git记录向前移动时保持工作文件不变。为了擦除工作文件以支持最新的版本,您可以将结帐的最新版本推送到服务器。
... 修改强>
我刚刚意识到我向你提供了解问题的信息(索引隐式更改但工作文件只是明确更改),但不一定是解决问题的最佳方法。以下是我过去所做的事情,以及如果您不想让中央裸存储库参与其中我建议的内容:
在服务器上:
git branch staging
git checkout staging
在客户端计算机上:
Hack away at some changes in master, then push to the server.
在服务器上:
git rebase master
(显式更新您的暂存分支以匹配更新的索引。)
最后,如果你想在服务器上进行更改(错误修正,你有什么),你也希望将这些更改同步到主服务器,你可以通过以下方式完成:
在服务器上:
Commit changes made on the staging branch.
git rebase master
git checkout master
git rebase staging
git checkout staging
然后你去,master中的每个提交都将进行暂存,并且在staging分支中进行的每个提交都将是master中的最新提交。
即使使用非裸中央存储库,这种工作流也应该适合您。基本上,您将裸露出服务器的主分支,并使分段分支成为服务器的工作副本。
一般来说,尽管网络中的2点似乎最简单,但拥有“集中式”裸存储库通常更简单,它允许您始终推送和拉动到该位置而无需真正考虑它。我还建议您可以从github.com获得网络代码可视化的好处,因为这个原因(开源的东西是免费的,我将它用于我现在所做的一切)。
答案 1 :(得分:1)
我猜没有远程设置。
使用git remote add <remotename> <address>
,您可以添加远程存储库。 <remotename>
只是您提供的名称,地址是您要从中提取的存储库的URL。
答案 2 :(得分:0)
你这么说:
我设置时没有使用init --bare 它,因为我明确想要 在服务器上有一份工作副本 好。
我们假设这个仓库位于$REPO_DIR
的服务器上。
是否要在服务器上打开一个shell cd
到$REPO_DIR
并在那里编辑代码?如果是这样,那么您不需要从任何遥控器拉。这是存储库的主副本。您只需编辑代码,然后git add .
和git commit
。
如果您要创建此仓库的本地副本,请在/home/user/my_repo
说明,然后您需要cd
到/home/user
并运行git clone $REPO_DIR
。这将创建远程引用,允许您从$REPO_DIR
推送和拉出。然后,当您完成更改后,可以将它们推送到遥控器。