Git工作流单独开发(完全Git新手)


Git workflow for lone developer (total git newbie)

我决定是时候开始在一个我已经随意开发了十多年的PHP项目上使用Git了。(请不要听版本控制警察的训诫!)由于我的VPS需要复杂的设置来完成项目所需的一切(特别是单代码库-多客户端结构和日语功能的TeX安装以创建专业pdf),因此不可能在我的本地Windows机器上设置开发环境。但我在服务器上有一个测试平台区域,我可以在那里玩游戏,所以这是我的开发区域。目前我使用Filezilla来访问服务器并直接在notepad++中打开文件,当我准备好看到我的编辑时,我只需要保存并让Filezilla上传。当测试台上一切正常时,我将文件复制到生产代码库区域。是的,除了我自己的评论之外,我没有任何更改的历史记录,而且我必须小心,不要将错误修复与未完成的新功能混合在一起。我可以看到Git的分支在不同的升级过程中的价值。

昨天我把脚趾头弄湿了。首先,我创建了一个Github帐户,然后(根据教程的建议)安装了Git For Windows(带有自己的Bash和看起来很小的GUI)和Kdiff3,并按照一些说明配置Git Bash。尽管如此,为了与我的Github帐户(适当地命名为Github for Windows)接口,我最终不得不安装其他东西,它似乎做了其他两个程序应该为我做的所有事情。无论如何,然后我做了一个简单的任务作为我第一次进入Github世界-我已经添加了功能到别人的jQuery插件,并希望与开发人员分享它,所以我分叉他的repo, 克隆它到我的机器,覆盖我之前编辑和测试的文件,同步到我的Github帐户,并发送拉请求。最后一句话中的所有术语对我来说都是全新的,所以我为自己能做到这一点感到非常自豪。,)但是我想我只需要Github软件,而不是Git软件——很难知道应该相信哪些教程。

无论如何,现在我想为我自己的东西找出一个工作流程,这是我对你们的实际问题。据我所知,除了公共Github之外,在任何地方拥有主仓库都是要花钱的,而且我不在乎别人是否看到我的代码(我不希望任何人在我的意大利面条代码组成的奇怪项目上工作,但如果他们想要,那就太好了)。好吧,然后呢?可能是这些场景之一,或者其他:

  1. 将repo的分支克隆到我的PC上,对本地文件进行编辑,并将它们上传到Filezilla中进行测试(比我目前的工作流程多几次点击,因为Filezilla不会自动查看本地文件和远程文件之间的关系,但不是什么大事)。然后,当我对代码感到满意时,在本地提交,同步到Github,并将文件(从某处-不确定这一点)复制到生产区域。

  2. 在我的VPS上安装Linux版本的Git,使"本地"Git文件位置成为测试平台,并通过PuTTY使用Git进行本地提交。文件结构更简单(完全不需要在我的PC上复制),但使用Git更麻烦:

    • 我不经常使用PuTTY,由于某种原因,连接经常在我身上死亡,我必须重新启动。
    • 尽管Linux命令行是Git的原生栖息地,但我可能更喜欢GUI(因为我很快就忘记了命令语法——我猜是老脑袋吧)。

    而且,由于我从未使用过我在这里安装的Git程序,我不确定我在服务器上使用的是Git还是Github。

  3. 其他一些场景,因为#1或#2都没有使用Git/Github来管理生产文件区域,这可能是一个好主意,这样我就不会忘记复制我需要的所有内容。

我试图研究基于php的GUI与想法#2的可能性(所以我不必使用PuTTY进行日常操作),但似乎这些工具的讨论都假设您正在尝试创建自己的Github服务,或者"本地"克隆的repo物理上在您的本地PC上(xAMP运行在任何操作系统上)。但也许我使用的Github软件足以做到这一切——这很难说。我还不明白Github上的主公共repo,某个地方的分支(也在Github上?),我的web服务器上至少两组文件(测试平台和生产区域),Github软件,Git软件和我坐在电脑上的键盘/屏幕之间的相互作用。

所以请原谅我的新手漫谈,但如果有人有类似的开发情况,你的工作流程是什么?或者你有什么建议吗?

处理这个问题的一种方法是:

您将需要三个存储库:

  • 一个本地的repo来编辑代码。[1]
  • 服务器上的裸远程存储库。这将位于一个不公开可见的位置,但您可以ssh登录。[2]
  • 生产环境。[3]

实现如下:

workstation$ cd localWorkingDirectory/
workstation$ git init
workstation$ git add .
workstation$ git commit -m 'initial commit'
workstation$ ssh login@myserver
myserver$ mkdir myrepo.git
myserver$ cd myrepo.git
myserver$ git init --bare
myserver$ exit
workstation$ cd localWorkingDirectory/
workstation$ git remote add origin login@myserver:myrepo.git
workstation$ git push origin master

每次在任何分支上进行提交时,使用:

workstation$ git push origin BRANCH

当您准备将分支version2移动到生产环境中时:执行以下操作

workstation$ git push origin version2
workstation$ ssh login@myserver
myserver$ git clone path/to/myrepo.git productionDirectory
myserver$ cd productionDirectory
myserver$ git checkout version2

哦不!它不工作!最好切换回版本1!

workstation$ ssh login@myserver
myserver$ cd productionDirectory
myserver$ git checkout version1

您不需要github(或任何其他中央存储)来开始使用git。特别是因为你是一个独立的开发者。Git直接运行在您自己的机器上,不需要任何服务器组件(不像subversion)。只要git init,然后开始提交。

我同意这里的其他评论,您应该以建立并运行本地开发环境为目标。即使这需要一些努力,但这绝对是值得的。这样做的副作用之一可能是,您被迫解耦当前的一些硬依赖项,从而从中获得更好的整体应用程序体系结构。在开发环境中不容易复制的东西可以用模拟服务代替。

设置好之后,查看脚本化的部署流程。例如,编写一个shell脚本,将开发机器的代码库与生产服务器同步。有很多方法可以做到这一点,但我建议你从简单的开始,然后修改你的选择(Capistrano是一个选择)。

对于您当前的开发设置,我当然会考虑像capistrano这样的东西。

我可以理解为什么你可能不愿意使用终端,但它可能会帮助你在上下文中理解git。不需要花很长时间掌握命令,当绑定到capistrano等系统时,您将很快将开发代码摇到您的环境中:

git commit -a 
git push origin develop
cap deploy:dev

当我在windows上工作时,我通常尝试在本地使用类似sun的virtualbox的虚拟机复制部署环境。这样你就可以在本地发展的同时尽量减少潜在的环境问题。然后,您可以使用putty ssh到本地vm。在虚拟机和主机操作系统以及所有标准ide/编辑器之间设置共享也可以工作。我发现这比远程设置vps更可取,但无论如何都有效。