首先说明一下,Git的话,用得比较少,目前版本管理用的还是SVN比较多。
不过Git感觉高大上一点,而且有很多代码托管站,因此也要学习一下。
新手,所以内容没有进行过多的考究,如有错漏,见谅。
本文会不断连载和更新,直到我认为自己已经是一个Git使用高手为止。
并且摒弃可视化界面,全部采用命令行的形式。
目录:
(虽然做了超链接,但是csdn的转跳貌似不能本页内转跳,各位用搜索的吧)
一、 首先是安装git软件
二、 添加ssh公钥
三、 创建项目
七、分支操作
九九九、一些技巧
一、 首先是安装git软件
安装过程不多说了,windows下安装注意安装的时候会让你选择是否要覆盖find等原有的cmd命令。
如果用惯了linux的同学建议覆盖,否则就保留吧。
下文以windows为例。
二、 添加ssh公钥
双击桌面上的 “Git Bash”。
如果没有这个东东的话,自己新建一个快捷方式,
目标:"C:\Program Files\Git\git-bash.exe" --cd-to-home
起始位置:%HOMEDRIVE%%HOMEPATH%
打开命令行之后输入:
cd ~/.ssh
mkdir keybackup
mv id_rsa* keybackup/ #备份
ssh-keygen -t rsa -C "你的邮箱"
然后直接三个回车。
这里注意邮箱一定要填准了,后面要对应得上才行。
然后就会生成两个文件:id_rsa 、 id_rsa.pub
cat id_rsa.pub 得到公钥里面的内容,然后添加到CSDN Code的“用户设置--SSH公钥管理”里面。
这样,就可以提交而不用提示输入密码之类的东东了。
用过免密码登陆远程ssh的人应该都懂这个东西的。
三、 创建项目
目前,貌似,只能在csdn页面上创建项目后push上去,好像不能在本地直接创建项目后上传的。
打开csdn code的自己的首页,点击“创建新项目”
填写好信息之后就会创建一个项目了,例如我的colorPalatte项目,它的ssh地址为: [email protected]:samed/colorpalatte.git
知道这些信息之后,回到git命令行。
如果项目已经写了一些源码了,就把源码拷贝过来当前文件夹,例如:
mkdir -p /e/Git/colorPalatte
cp -r /someplace/colorPalatte/ /e/Git/colorPalatte
cd /e/Git/colorPalatte
git init # 初始化项目(每个项目仅运行一次)
# 配置信息(每个项目一般只运行一次,此处示例为仅本项目可用,避免存在多个托管站出现冲突的情况)
git config user.name 'samed' # 引号内的内容是这次提交的人的名字,建议用你csdn的登陆用户名,这样就能关联用户信息。
git config user.email '[email protected]' # 和你创建rsa证书的时候的email要对应上,因为你的公钥已经发布到csdn code上了。
git remote add origin [email protected]:samed/colorpalatte.git # 这里就是之前提交的ssh地址了。
# 提交本地项目文件(每次提交均需要运行)
git add ./
git commit -m "V1.0" # 引号内是本次提交的名字(个人习惯是用版本号作为提交名字)
# 上传服务器
git push -u origin master # 采用origin服务器配置,提交到master分支。
最后一步可能要等一段时间,取决于你的网络环境和项目文件的大小。
提交成功后就能看到当前文件夹有个master的字眼:(因为GitHub生成分支要收钱,暂时没有钱,所以我还没有试过不是master是什么情况,有经验的老司机给指点一下)
四、 更新原有的项目(push)
接着“三”来讲,如果你已经建立过一个项目并且曾经提交过了。
那么就不用那么麻烦了。
针对新增的文件进行提交即可:(这里就不作过多的解释了)
git add ./
git commit -m "V1.1"
git push -u origin master
五、 进行README文件的编写
其实,这个和git没有关系了,所以不多说,知道用的是markdown的语法就行了,还有说一下csdn code 和 GitHub的区别。
在GitHub上,默认是显示README.md这个文件的。
而csdn code上,如果有README-zh.md这个文件,优先显示这个,如果没有,就显示README.md。
这个区别还是很贴心喔,赞一个,符合中国人的使用习惯。
另外,GitHub上 LINCENSE 文件是标配,所以建议把这个文件也弄上去,看起来俺们很专业。
附上常用的两个 LINCENSE 文件:
MIT LICENSE: http://download.csdn.net/detail/samed/9524141
MIT协议是最宽松的开源协议,只要说明一下是开源的OK了。
GUN LICENSE: http://download.csdn.net/detail/samed/9524148
GUN协议是是比较严格的开源协议,如果你使用了基于GUN的开源代码,则基于此的项目均需要开源。
六、 把项目下载到本地(clone和pull)
经过了四的步骤,知道了怎么更新本地代码到托管库,那么怎么下载回来呢?
这个步骤经常发生在新的电脑、或者“家里”的电脑进行操作。
有两种办法:
6.1、 全新项目
一个命令就好了:git clone 项目的https地址
举例,还是按照俺的colorPalatte项目,两个地址分别是:
SSH:[email protected]:samed/colorpalatte.git
HTTPS:https://code.csdn.net/samed/colorpalatte.git
所以使用这个命令 “git clone https://code.csdn.net/samed/colorpalatte.git” 将会在当前目录下新建一个 colorPalatte 文件夹,并且把项目文件都下载下来。
如果仅仅是下载,那么这样就完了,如果是后面要上传的,那么还需要设置一下user.name、user.email、remote等(参考6.2)
6.2、 已经存在的项目
如果已经配置过了,那就是一个命令:git pull 库SSH地址 分支名
举例,已经配置了SSH地址是 origin ,分支是master,那么就是:“git pull origin master”
如果不知道咋配置,可以参考一下“四、 更新原有的项目(push)”的内容,照顾新手罗嗦一下:
git config user.name 'samed'
git config user.email '[email protected]'
git remote add origin [email protected]:samed/colorpalatte.git
另外,其实用这种方法也可以建立全新项目,先建立一个同名目录,然后进入目录git init一下,在按照上面三行设置一下,就可以pull全部文件到本地了。
七、分支操作
实际开发过程中,需要经常添加分支(目前github免费用户不能添加分支),因为针对当前版本的功能,需要先经过检验测试之后才能投入生产。
所以新建分支,然后经过验证之后再合并分支,是最正常的做法了。
7.1 创建分支(步骤)
7.2 合并到主分支(步骤)
- 列举当前所有分支:git branch
- 创建分支(假设名称为2.0):git branch 2.0
- 切换到分支:git checkout 2.0
- 切换到主分支:git checkout master
- 合并:git merge 2.0
- 删除已经合并的分支:git branch -d 2.0 #注意,-d参数要求已经合并之后的分支才能删除,如果没有合并,使用-D参数强制删除
7.3 删除远程分支(方法列表)
7.5 下载远程分支(方法列表)
- git push origin :<branchName>
- git push origin --delete <branchName> # 此为git1.7.0之后的版本才有
7.6 强制将远程分支覆盖到本地(步骤)
- 直接新增的话:git clone -b <branchName> <git_(http/ssh)_url> # 注意了,只下载这个分支而不下载master
- 在已有的git项目中下载:git fetch origin <branchName>:<branchName> # 第一个branchName表示远程分支名字,第二个表示在本地建一个分支的名字。
- git checkout <branchName> # 良好习惯,先切换到本地同名分支
- git fetch --all
- git reset --hard origin/<branchName> # 此时已经下载文件了
- git pull # 此步骤如果是在master分支下操作,则会进行merge操作。
八、 Git基本语法(待添加示例)
语法 | 功能说明 |
---|---|
git clone | 克隆版本库 |
git pull | 拉回远程版本库的提交 |
git push | 推送至远程版本库 |
git add | 添加至暂存区 |
git add–interactive | 交互式添加 |
git apply | 应用补丁 |
git am | 应用邮件格式补丁 |
git annotate | 同义词,等同于 git blame |
git archive | 文件归档打包 |
git bisect | 二分查找 |
git blame | 文件逐行追溯 |
git branch | 分支管理 |
git cat-file | 版本库对象研究工具 |
git checkout | 检出到工作区、切换或创建分支 |
git cherry-pick | 提交拣选 |
git citool | 图形化提交,相当于 git gui 命令 |
git clean | 清除工作区未跟踪文件 |
git commit | 提交 |
git config | 查询和修改配置 |
git describe | 通过里程碑直观地显示提交ID |
git diff | 差异比较 |
git difftool | 调用图形化差异比较工具 |
git fetch | 获取远程版本库的提交 |
git format-patch | 创建邮件格式的补丁文件。参见 git am 命令 |
git grep | 文件内容搜索定位工具 |
git gui | 基于Tcl/Tk的图形化工具,侧重提交等操作 |
git help | 帮助 |
git init | 版本库初始化 |
git init-db | 同义词,等同于 git init |
git log | 显示提交日志 |
git merge | 分支合并 |
git mergetool | 图形化冲突解决 |
git mv | 重命名 |
git rebase | 分支变基 |
git rebase–interactive | 交互式分支变基 |
git reflog | 分支等引用变更记录管理 |
git remote | 远程版本库管理 |
git repo-config | 同义词,等同于 git config |
git reset | 重置改变分支“游标”指向 |
git rev-parse | 将各种引用表示法转换为哈希值等 |
git revert | 反转提交 |
git rm | 删除文件 |
git show | 显示各种类型的对象 |
git stage | 同义词,等同于 git add |
git stash | 保存和恢复进度 |
git status | 显示工作区文件状态 |
git tag | 里程碑管理 |
九九九、一些技巧
1. 打包新文件
因为git是支持本地提交,本地管理版本库的,因此有可能本地版本修改了之后需要同步到现网环境去,那么要怎么打包这些更新了之后的文件呢?
用一句话就ok了:(当然,要进到项目当前目录下面)
git status -s | awk 'BEGIN{a=""}{a=a" "$2}END{print a}' | xargs -i echo "tar czvf 123.tar.gz {}" |sh
好了,今天先讲这么多。
---------------------
参考文献:
1. CSDN HELP