git的新手 - 我如何从克隆的repo变为原始仓库?

时间:2010-09-25 00:10:26

标签: git version-control

这可能是一个新问题,但我似乎无法弄明白。

这就是我做的......

在服务器上(通过ssh):

  • 在专用服务器上创建网站
  • 在那里创建了一个git repo(我认为git init?)
  • 添加并提交了所有内容

在我的办公室:

  • 在我的开发机器上克隆了回购
  • 拉一切
  • 对本地文件进行了一些更改
  • 再次添加文件(这是对的吗?不像svn!)
  • 做了提交
  • 推了推。

...现在,在服务器上,如果我git show,它会显示一个差异,其中删除了服务器的最后一个东西副本,并添加了我从办公室推送的内容。这就是我想要发生的事情。我无法弄清楚的是:我需要在服务器上做些什么才能使我从办公室推出的更改变为“实时”?

我过去在使用svn部署网站方面取得了相当不错的成功,我想我也可以用git来解决这个问题......但显然我错过了一些难题。谢谢你的帮助。


修改 - 我刚刚注意到这篇文章:Git - pulling changes from clone back onto the master

我应该把我的办公室仓库拉到我的服务器而不是把它放在那里吗?所以ssh从办公室进入服务器,然后把它git + ssh带回办公室拉回那个回购?这似乎有点疯狂,如果可能的话,我宁愿弄清楚如何推动。


重新提出问题

我真的只想应用git show显示的补丁。 git有内置的方法吗?


答案

看起来服务器上的git checkout -f做了我想要的,但是创建一个--bare repo本来是一个更好的方法(我现在已经改为这个设置)。

2 个答案:

答案 0 :(得分:4)

通常在服务器上你会做一个git init --bare,它会创建一个没有工作目录的仓库。如果这是您所采用的路线,那么您必须将更改从那里拉到Web目录作为“部署”步骤。所以你的工作流程可能看起来像......

On dev PC:

1. git clone <path to server repo>

*make code changes*

2. git commit -am "fixed a bug"

*add some new feature*

3. git commit -am "added cool new feature"

4. git push origin master


On the server:

*cd to www folder*

5. git pull
  1. 将服务器repo克隆到您已经完成的开发计算机
  2. 将错误修复程序提交到本地 repo ...而不是服务器的repo
  3. 将新功能再次发送到您的本地目录...而不是服务器的
  4. 将所有更改从主分支推送到服务器的主分支
  5. 此时,您的网站上无法看到任何更改。你需要“部署”它们。

    5.将服务器上中央存储库的最新更改发送到网络上提供的网络服务器文件夹。

    git tutorials非常好,“Pro Git”,一本免费的在线图书

答案 1 :(得分:1)

如果您推送的服务器上的git repo是针对实时系统的,那么推送后我可能不得不在服务器上执行[编辑] git reset [--hard|...] HEAD(我猜)有关使用--hard或其他内容的详细信息,请参阅git-reset man page; --hard 重置您服务器上的所有非提交修改。

如果实时系统位于服务器上的其他位置,请从您推送到的仓库(在您的实时系统的目录中)执行git pull

push fetch 是互补的,即从A推送到B就像从B中取A一样。
pull fetch ,后跟结帐

修改
您还应该阅读jmohr链接到 push fetch / pull 之间细微差别的文章:{{3} }