GIT和GITHUB
版本控制
Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理.Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。Torvalds 开始着手开发 Git 是为了作为一种过渡方案来替代 BitKeeper,后者之前一直是 Linux 内核开发人员在全球使用的主要源代码工具。开放源码社区中的有些人觉得 BitKeeper 的许可证并不适合开放源码社区的工作,因此 Torvalds 决定着手研究许可证更为灵活的版本控制系统。尽管最初 Git 的开发是为了辅助 Linux 内核开发的过程,但是我们已经发现在很多其他自由软件项目中也使用了 Git。例如 最近就迁移到 Git 上来了,很多 Freedesktop 的项目也迁移到了 Git 上。
什么是git
GIT
Git 是一个开源的分布式版本控制软件,用以有效、高速的处理从很小到非常大的项目版本管理。
GitHub等
GitHub、GitCafe、BitBucket和GitLab等是基于Git版本控制的远程文件托管平台。
使用场景:
- 无远程:在本地 .git 文件夹内维护历时文件
- 有远程:在本地 .git 文件夹内维护历时文件,同时也将历时文件托管在远程仓库
PS:
集中式:远程服务器保存所有版本,用户客户端有某个版本
分布式:远程服务器保存所有版本,用户客户端有所有版本
git基本使用
基本使用
git init // 初始化文件
git status // 查看状态
git config --global user.name "<NAME>" // 配置用户
git config --global user.email "<EMAiL>" // 配置邮
git add 文件名
git commit -m "提交信息"
git ls-tree head //查看版本中所有文件
git ls-files -s //查看暂存区和版本中所有文件
stash
git stash // 将当前做过的修改,临时保存
git stash pop // 临时修改放回工作区(有可能出现冲突)
branch分支
通常情况下,主分支master用于上线,dev分支用于开发。
git branch dev // 创建分支branch
git branch // 查看当前分支
git checkout dev // 切换分支
git merge bug // 合并bug分支到当前分支
git branch -d bug // 删除分支bug
远程仓库
公司搭建的常见的有gitlab。
远程仓库使用流程
1.创建代码仓库
2.添加代码仓库
git remote add origin https://github.com/zouruncheng/s4blogs.com
3.上传代码
git push origin master
3.从远程下载代码
git clone <github仓库地址>
4. 写代码
5.上传代码
git push origin master
错误:refusing to merge unrelated histories
fatal: refusing to merge unrelated histories
Error redoing merge 1234deadbeef1234deadbeef
解决
git pull --allow-unrelated-histories origin master
协同开发
协同开发的工作模式
- 首先,可以试图用
git push origin branch-name
推送自己的修改; - 如果推送失败,则因为远程分支比你的本地更新,需要先用
git pull
试图合并; - 如果合并有冲突,则解决冲突,并在本地提交;
- 没有冲突或者解决掉冲突后,再用
git push origin branch-name
推送就能成功!
当你从远程仓库克隆时,实际上Git自动把本地的master
分支和远程的master
分支对应起来了,并且,远程仓库的默认名称是origin
。
要查看远程库的信息,用git remote
:
$ git remote
origin
推送分支
git push origin master // 推送主分支
git push origin dev //推送dev分支
master
分支是主分支,因此要时刻与远程同步;dev
分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;- bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
- feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
常见错误
error: failed to push some refs to 'git@github.com:triaquae/gitskills.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again. #提示你了,先把远程最新的拉下来再提交你的
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
多人协作时,当2个开发者同时向远程push代码时,后push的一方会出现错误,解决办法也很简单,Git已经提示我们,先用git pull
把最新的提交从origin/dev
抓下来,然后,在本地合并,解决冲突,再推。
忽略特殊文件
在Git工作区的根目录下创建一个特殊的.gitignore
文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。
不需要从头写.gitignore
文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了。所有配置文件可以直接在线浏览:https://github.com/github/gitignore
忽略文件的原则是:
- 忽略操作系统自动生成的文件,比如缩略图等;
- 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的
.class
文件; - 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。