我是一名开发人员,一直只是通过FTP开发到开发服务器,然后在准备好后将文件转移到生产环境中。我一直对使用git和GitHub很感兴趣,现在我终于找到了一个很好的借口我正在开始一个新项目。但是,这样做似乎很乏味:
git add file1.php
git add file2.php
git commit -m 'updated file1 & 2'
git push origin master
然后在GitHub上的repo中,SSH进入我的服务器,转到正确的目录,然后执行:
git pull
每次我对代码进行任何更改。这适用于像Coda这样的编辑,然后只需单击命令+ S.
有更好的(可能更自动化)方式吗?我知道有一个GitHub for Mac应用程序非常好并且有助于第一部分,但我仍然需要登录SSH来更新任何东西,这可能会在一个下午的几十个更新后变得乏味。
我也看到我可以添加一个post-hook,所以我可以调用一个PHP脚本来执行每次提交的git pull,但我觉得可能存在一些安全问题,更别提了该脚本失败的问题,因为它无法输入密码。
答案 0 :(得分:7)
我强烈建议您阅读ProGit书籍http://progit.org/
不,有更快的方法可以做到这一点。
添加文件后,您可以简单git commit -a -m "Change descriptions"
为了添加文件,你可以git add .
以递归方式添加所有未被忽略的文件。
如果您与分支机构建立了跟踪关系,那么您需要说的只是git push
。只有当其他人做出改变时,您才需要git pull
当然有许多IDE可以帮助管理各种品种的git和git guis。 https://git.wiki.kernel.org/index.php/Interfaces,_frontends,_and_tools
但实际上从命令行中只需要知道一些命令就可以知道。
您将每天使用的这些命令
git pull --rebase # Getting changes other people made. Using rebase is my personal preference
git commit -a -m msg # Committing your work
git push # Sharing changes with others
git status # Finding out what you have not committed/pushed
git diff # Finding out what changed
这些命令仅用于设置或很少
git init # Set up a new git repo
git clone URL # Set up a git repo from the master source
git add <file/directory> # Mark a change specifically for commit
我想重申,git 不是一个Web部署系统。但是,如果您尝试做类似的事情,有些人已经成功使用了http://toroid.org/ams/git-website-howto
答案 1 :(得分:3)
在每次提交后,你都不需要git pull你有一个本地分支,git pull
很乐意提取多个更改。此外,您可以使用git add .
或git commit -a
添加/提交所有更改,而无需转到git add file{1,2}.php dir/otherfile.txt
或等效。请确保之前使用git status
,这样就不会错误地添加和提交您不想要的内容。
使用git的目的是进行版本控制。它是一个非常强大的源代码管理工具,但它并不仅仅用作文件传输机制。如果您想要/需要的只是FTP,请使用(S)FTP。
答案 2 :(得分:2)
如果您对服务器有足够的控制权,则可以在服务器上托管自己的中央存储库。 (如果没有,您可能仍然可以执行以下操作。)
从那里,您可以设置后接收挂钩以自动执行拉动或安全复制(scp)到您的实时部分/服务器。 Gitolite可以帮助解决安全问题,SSH密钥身份验证也是如此。
另外,正如DyInuge所提到的,你不必在每次改变后都要推动。您可以毫不费力地执行多次提交。
最后,除了Seth的推荐,我还将Git Immersion添加到您的阅读列表中。这是一个分步教程,旨在帮助您了解Git的工作原理以及您可以在其中执行的操作。
答案 3 :(得分:1)
使用git和GitHub似乎需要做很多额外的工作,我看错了吗?
我会争辩说“是的,你正在看这个错误”,我认为@Mat的评论有正确的想法。 Git是一个版本控制系统。当它已经成为您工作流程的一部分时,您也可以将它用作部署工具这一事实可以是一个很好的奖励。
我认为您应该使用git或其他形式的版本控制,因为您正在生成代码(或任何其他形式的数字工作)并尝试这样做而没有您的更改历史记录和能力管理并发分支是疯狂的。但是,如果我需要在您的工作流程中向您推销包含版本控制的价值,那么就没有必要担心git作为部署机制的效果如何。
答案 4 :(得分:0)
其他答案已经涵盖了命令行的效率 - 来自Coda就像你自己一样,需要一段时间才能适应,但是一旦你有了它,你就会喜欢它(特别是当你必须重置。)
这是我在完成(基本上)你所做的之后最近如何推出我的DVCS部署。唯一的区别是我出于安全原因使用了gitolite而不是GitHub。
中央git服务器有一个存储库 - 在master
分支上,如果它是一个开源项目,我会检查一个vanilla安装,或者我有最新的工作/稳定代码。然后,我为每个阶段创建一个分支 - 所以在您的情况下,有一个Live / Production分支和您的本地开发环境。
我从dev
分支开始工作,制作功能分支或修补程序并将它们合并备份。一切都稳定后,我将与prod
分支合并。然后,我使用基于SSH的挂钩连接到远程服务器并启动pull,这是PHP脚本的替代方案,并且更加安全。
即使您无法在服务器上安装git,您仍然可以使用挂钩来自动部署。我必须进行广泛测试以确保这是安全的,所以我建议你也这样做。此外,需要设置Apache以将任何请求重定向到.git
目录,以便该目录不可读。
无论哪种方式, git都不是理想的Web部署系统,如果您不习惯编写钩子来实现一切。如果您有任何预订,请继续通过FTP上传。至少你现在有版本控制。