在工作学习中,备份是一个十分重要的习惯,只有经历了硬盘损坏才明白数据无价的道理。
回想过去自己的备份习惯,通常是整个项目文件夹拷贝加上日期,有时候会加上个版本号。然而,这种方式虽然简单但却有着致命的缺点。首先,没有对文件进行更改追踪,就不能具体知道每个版本分别修改了什么(常常出现找不到代码的情况);其次,整个项目拷贝通常占用较大的存储空间。个人开发者还勉强能够接受,一旦涉及多人协同开发,这种管理方式往往是不可行的。
Git作为各大企业使用的版本控制工具,就像一个高级的时间机器,不仅仅能够让你回溯过去查看历史,甚至还能更改历史。
为了提高开发效率,学习并掌握Git是十分有必要的。
话说Git和著名的Linux是同宗同源,都是由Linus Torvalds开发的。21世纪初,Linux在世界上引起了一波开源浪潮,许多的开发者都向Linux提交代码,当时代码管理的任务是由微软的BitKeeper工具来实现的。但本着开源的思想,Linux开发者希望将 BitKeeper开源,因此触犯了微软的利益,结束了BitKeeper提供的服务。
这迫使 Linux 社区寻找或创建一个新的版本控制工具,最终,Linus Torvalds 用了两周时间开发了 Git,一直流传至今,成为当下最热门的分布式版本控制系统
与分布式版本控制系统相对的还有集中式版本控制系统,最经典的就是Git和SVN,它们的差别如下:
完整的代码库:每个参与者的机器上都有代码的完整拷贝。这不仅包括当前的代码快照,还包括整个历史记录。
不依赖中央服务器:虽然可以有一个“主”存储库供开发者推送更改,但每个开发者的本地存储库都可以独立工作。
更强大的分支和合并:DVCS通常提供更高级和灵活的分支和合并功能。
离线工作:由于每个开发者都有完整的代码库,因此他们可以离线工作,并在稍后同步更改。
中央存储库:所有的版本历史都存储在一个中央服务器上,开发者通常只获取代码的最新版本。
完全依赖中央服务器:如果中央服务器出现问题,可能会暂时阻止开发者进行版本控制操作,或者在最坏的情况下导致数据丢失(除非有备份)。
速度:由于所有操作都需要与中央服务器通信,某些操作可能会较慢。
需要网络连接:开发者需要连接到中央服务器才能提交更改,虽然本地工作可能仍然是可能的。
实践出真知。这里以GitHub为例,提供了两种最常见的情况下使用Git的方法。推荐在Windows环境下使用Git Bash
初始化在环境配置阶段仅需要完成一次,在不更换电脑和不修改Github账户的情况下无需再操作。
git config --global user.name "Your Name"
git config --global user.email "Your Email"
ssh-keygen -t rsa -C "Your Email"
Git操作的对象通常是一个仓库,因此每个项目工程都应该建立一个仓库,而不建议一个仓库下放多个项目文件。
该情景适用于在完成一个新项目的第一个版本后,需要将该版本备份的情况。
git init
git remote add origin
git branch -m main
git add .
git commit -m "Your commit message here"
git pull origin main
注意:如果提示 fatal: refusing to merge unrelated histories 是因为本地仓库和远程仓库的历史修改信息不同步(此时远程仓库可能不为空)。解决方案是不考虑他们的历史是否有关联(由于是新仓库,该操作合理):
git pull origin main --allow-unrelated-histories
git push origin main
该情景适用于在已有项目上继续开发新的功能,或者基于已有项目进行学习和开发。
由于克隆的仓库中本身存在git仓库,因此不需要使用git init来初始化一个仓库
git clone
cd
git checkout main
git add
git commit -m "Your commit message here"
git pull origin main
git push origin main
touch ~/.ssh/config
Host github.com
ProxyCommand connect -S 127.0.0.1:10808