「git版本跟踪系统」和项目「构建系统」位于同一个工作目录,然而,git版本跟踪系统 是完全独立于「构建系统」的,是项目管理任务中重一项任务。版本跟踪看《Why Use a Version Control System?》和《what-is-version-control》。
不管怎样,版本跟踪任务 还是现代软件项目管理、构建、协作和分享的重要一环。在继续给我们的构建系统增加功能之前,先将为它添加版本跟踪系统(或者叫加入到项目管理之中)。
EM:「项目目录」是多个逻辑任务的宿主,版本管理,和软件构建是软件管理并行的两个任务。
设计大于系统,系统大于创建提交
对很多实践爱好者来说,最有价值的「版本跟踪任务」是创建和提交新版本 commit(git add / commit),还有与远程仓库推拉更新(git push/pull),然而,这些日常版本跟踪任务的前置条件(git init)更具价值,例如整个「分布式版本跟踪系统」的原理知识;当然,还有比此二更具价值的知识,那就是具体的commit,branch, repo的版本设计;简单的说,「版本设计」就是有关一个commit里有怎样的版本增量数据,一个branch有怎样的commit历史 和一个repo应该有怎样的branch结构等设计策略。
添加git 系统
OK,意义,和理论讲这么多。开始操作。
给我们的Web project(a-wgp) 添加git 系统分两步:
- 第一,创建repo;
- 第二,发布到github(我们未必一定需要远程协作,也未必选github,但是一般规模的项目都有远程协作的需求,所以创建分布式版本管理是很有必要)
从现有项目上创建repo
$ cd a-wgp $ git init ## 初始化一个repo,体现在创建一个隐性目录.git $ git add . ## 将项目所有文件添加到暂存区,构建第一个commit $ touch .gitignore && git add .gitignore ## 创建过滤配置文件,并添加到暂存区,加入跟踪 $ git commit ## 提交,并根据提示在vim编辑界面上输入commit描述
添加了git系统的build sys 文件系统构成
[keminlau@localhost a-wgp]$ tree -a . ├── build ├── .git ├── .gitignore ├── package.json └── src ├── app.js └── index.html
发布到 github
我们现在在本地已经有了一个repo,将它发布到github的意思是说,将在 github 的服务器创建一个远程的repo,并将俩关联而 构建一个分布式版本跟踪系统。完成创建分布式系统需要两个能力条件:
- 第一,掌握「git分布式系统」创建和配置的知识;
- 第二,掌握github的创建和推送repo的知识;包括「SSH系统」的配置的知识;
我们大概的任务步骤是,先在 github 上创建一个同名空repo,再在本地进行分布式系统配置,最后将本地的repo数据“推”上远程repo,以此来完成分布式系统的创建。
创建一个同名空repo
• 转到 github 登录你的帐户
• 单击右上角的 new repository 按钮。你可以选择用一个 README 文件来初始化 repository
• 填写项目信息
• 单击“Create repository”按钮
有了远程repo,接着要配置远程通信。github支持HTTPS和SSH两种登录 ,这里只使用了SSH,据说HTTPS更流行。
配置本地SSH 登录客户端
要将本地数据传输上服务器,我们需要Secure Shell (SSH) 系统进行安全通信,这功能一般操作系统会默认安装。但可能需额外的配置。
「SSH系统」有多个工作模式,其中最流行是使用「密钥对认证」登录,所以需配置SSH keys,其中私钥在本机,公钥在服务端;我们配置步骤有:
第一,先在本机生成(如果之前没有生成过)密钥对,并(可选)对私钥进行口令(passphrase)加密;
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com" > Generating public/private rsa key pair. > Enter a file in which to save the key (/home/you/.ssh/id_rsa): [Press enter] > Enter passphrase (empty for no passphrase): [Type a passphrase] > Enter same passphrase again: [Type passphrase again]
注:-C 参数不能随意,必须是你的github email数据
「密钥对」是对远程登录验证加密,而「私钥口令」则是对私钥本身加密,以防盗用。如果添加了私钥口令,则每次登录操作都输入口令,也可通过ssh-agent代劳(此任务待定,此处不使用私钥口令)。
第二,拷贝公钥数据,配置服务端;
配置远程(github)SSH 服务端
这个主要通过github界面,添加公钥数据
- 转到你的github帐户设置
- 点击左侧的“ SSH and GPG keys”
- 点击右侧的“Add SSH Key”
- 添加title(例如“nakeman at home”),然后将公钥粘贴到大文本框中
链接测试
$ ssh -T git@github.com
有“成功认证”信息表示成功链接。
配置本地git 并推送repo
主要是配置步骤:添加远程(remote)库关联,和tracking branch
[keminlau@localhost a-wgp]$ git remote add origin git@github.com:nakeman/a-wgp.git [keminlau@localhost a-wgp]$ git branch --set-upstream-to=origin/master master
推送
[keminlau@localhost a-wgp]$ git pull [keminlau@localhost a-wgp]$ git pull --allow-unrelated-histories [keminlau@localhost a-wgp]$ git push -u origin master
由分布式系统创建的顺序未考虑周全,这里有一个小“BUG”,推送不是很顺利。由于分别分布式两端都创建了新库,并提交了初始版本(init commit),这样,当前系统状态是 远程端已经有了新版本,不能直接推送(push),要先拉取(pull)数据。而拉取时发现了“unrelated-histories”,故还不能直接拉取,要强行拉取(–allow-unrelated-histories)。
正确的创建顺序应该先在Github上创建空的中心库(origin),再克隆到本地,在这个克隆的基础上创建分布式版本跟踪系统:把项目添加进去,创建初始版本,再推送,就不会产生一个分支两个不相关的历史commit了。
小结
严格的git工作流程:
- 第一,分布式系统先创建中心库origin,再在客户端克隆操作,完成分布式系统创建;
- 第二,添加commit要在一个工作分支上,而不要master上直接commit;
- 待补充……
Be First to Comment