版本控制在软件工程实践中是非常重要的,Git是现在最流行的版本控制工具。但是很多时候我们需要和一些不喜欢用Git的开发者合作,他们可能使用Svn甚至喜欢拷贝压缩包来交换代码。我们不想陷入软件版本凌乱的陷阱中,但是又不想太强硬,这时候怎么办呢? 我在实际工作中遇到这类情况,仍然使用Git进行本地管理。下面分两种情况说明,一是和使用Svn的开发者配合,二是和手动管理版本的开发者配合。

和使用Svn的开发者配合

如果是我们先建立的仓库,比如我们在Github或者码云上建立的,Svn开发者都是可以使用Svn工具更新代码的。
Github的svn支持
如果是对方先建立的仓库,我们首先找一个空目录,使用任意的Svn客户端将代码下载下来。
svn checkout
然后我们发现除了项目文件,还有一个隐藏的.svn文件夹,里边存储了svn仓库的一些配置,也有和Git类似的忽略文件等等,但是没有本地的代码版本。和Git不同Svn是中心化的集中式的版本控制,查看版本历史必须有服务器,而Git是去中心化的分布式的版本控制,只有同步的时候才需要服务器,每个人本地都有完整的历史,平时自己玩就可以,想把服务器换成Gitlab了,只要推送上去就行了。 然后我们从命令行进入这个文件夹,建立一个本地的Git仓库,命令就是git init,然后git add ,最后再git commit 。可以顺手加一个.gitignore文件,将.svn目录和IDE的配置文件加入忽略,比如idea的.idea文件夹。
此时我们看到目录下又出现了一个.git文件夹,这里会存储Git仓库的相关文件,比如所有的历史,本地仓库的配置文件等等。我们要把这个.git 文件夹加入svn的忽略中。这样,svn客户端看不到.git文件夹,git客户端看不到.svn文件夹,二者就能相安无事了。
在Idea中,如果第一次打开项目是Svn管理的,那么Idea默认启用Svn插件,如果我们想切换回Git管理,只需要修改.idea文件夹下的vcs.xml,将其中svn改成Git即可,注意svn是小写,Git是大写首字母。
然后我们就可以查看Git仓库中的历史信息了,也可以看到右下角已经成为了idea的git插件的按钮。
自己建立的本地Git仓库,也可以推送到自己喜欢的服务器上,例如码云或者Github。 在平时的开发过程中,使用master作为与svn同步的分支,自己开发使用单独的一个分支。需要更新svn上的小伙伴的最新代码时,先暂存自己的分支的修改,可以用git stash等命令,然后切换到master分支,使用svn客户端获取服务器更新,把这些更改提交为一个commit,描述可以写做“svn更新”,然后切换回自己的分支,git merge origin/master即可。 当需要推送到svn时,先切换到master,然后把自己分支的代码合并到master,然后使用svn客户端提交即可,最后再切换回自己的分支进行开发。这样就可以愉快的开发,头脑不会混乱。

和手动管理版本的开发者配合

如果有些项目不想使用版本控制工具,就想使用压缩包拷贝过来拷贝过去,但我们自己想使用Git让自己的工作井然有序,也是可以做到的。 首先我们拿到代码时,也就是一次手动的同步时,建立我们的本地Git仓库。然后我们仍然把master作为同步代码用的分支,另开一个分支进行工作。当我们的同伴把一个新的压缩包给我们时候,我们首先保存手头的工作,切换到master,将同伴的代码复制替换到项目文件夹中,然后把所有的更改添加为一个commit,代表同伴的更新。然后切换回我们自己的分支,将master合并到自己的分支完成一次同步。如果同伴需要我们的最新代码,我们可以使用一个命令
git archive -o update.zip HEAD $(git diff –name-only HEAD origin/master) ,将我们的修改以压缩包的形式打包发给同伴。也可以切换到master,然后合并自己的分支的修改过来,再把整个文件夹发给同伴。 这样就可以有条不紊与各种开发者合作了。但是我们还是要逐渐去开导大家,都使用最流行、最通用的工具。Git是个分布式的版本控制工具,不是说必须在Github上使用,我们自己本地用一用也会提高工作效率。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据