这可能是一个新问题,但我似乎无法弄明白。
这就是我做的......
在服务器上(通过ssh):
git init
?)在我的办公室:
...现在,在服务器上,如果我git show
,它会显示一个差异,其中删除了服务器的最后一个东西副本,并添加了我从办公室推送的内容。这就是我想要发生的事情。我无法弄清楚的是:我需要在服务器上做些什么才能使我从办公室推出的更改变为“实时”?
我过去在使用svn部署网站方面取得了相当不错的成功,我想我也可以用git来解决这个问题......但显然我错过了一些难题。谢谢你的帮助。
修改 - 我刚刚注意到这篇文章:Git - pulling changes from clone back onto the master
我应该把我的办公室仓库拉到我的服务器而不是把它放在那里吗?所以ssh从办公室进入服务器,然后把它git + ssh带回办公室拉回那个回购?这似乎有点疯狂,如果可能的话,我宁愿弄清楚如何推动。
重新提出问题
我真的只想应用git show
显示的补丁。 git有内置的方法吗?
答案
看起来服务器上的git checkout -f
做了我想要的,但是创建一个--bare repo本来是一个更好的方法(我现在已经改为这个设置)。
答案 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
此时,您的网站上无法看到任何更改。你需要“部署”它们。
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} }