当你是git中的原始回购时,你如何做一个本地拉?

时间:2009-11-18 15:01:29

标签: git

我有一台服务器,我在其中设置了一个Git存储库。从我的客户,我可以执行

  

git pull origin

  

git push origin

我的更改被正确地推送/拉到远程Git服务器。我还需要能够在服务器上签出项目。我在设置时没有使用 init --bare ,因为我明确希望在服务器上也有一个工作副本。

然而,当我运行 git pull 时,我收到一条消息致命:你想从今天的哪个位置获取?。如何在服务器上查看我本地工作副本的最新更改?

3 个答案:

答案 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推送和拉出。然后,当您完成更改后,可以将它们推送到遥控器。