一、什么是Git?
Git是目前世界上最先进的分布式版本控制系统。
二、SVN和Git的区别?
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就纳闷了。
Git是分布式版本控制系统,它没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
三、Git 上传文件、文件夹或项目到 Github
配置Git、SSH
1、下载、安装 Git
傻瓜式操作,到git官网下载好后和普通软件安装一样安装就好了,没啥可说的......
2、绑定用户
git init //初始化git目录,执行之后会在当前目录下生成一个.git文件夹
//这两操作在第一次使用GitHub时执行一次以后就不需要重复执行了
git config --global user.name "Your Name" //配置gitHub的用户名
git config --global user.email "email@example.com" //配置GitHub的邮箱
3、配置 SSH
(1)在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开GitBash),创建SSH Key,密码可以不设置直接回车
ssh-keygen -t rsa -C "email@example.com"
如果一切顺利的话,可以在用户主目录里找到 .ssh 目录,里面有 id_rsa 和 id_rsa.pub 两个文件,这两个就是SSH Key 的秘钥对,id_rsa 是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。用记事本打开 id_rsa.pub(C:\Users\Administrator.ssh),得到ssh key 公钥。
(2)为 Github 账户添加 ssh key 。登录 Github,展开个人头像的小三角,点settings,然后打开SSH keys菜单,点击Add SSH key新增密钥,填上标题。
(3)ssh -T git@github.com 关联账号和ssh
4、在Github上建立仓库
填一下仓库名称,Initialize this repository with a README是可选的,建议在创建时选上,可以在后面省一个步骤。填好之后,点Create repository完成仓库的建立如果在创建仓库的时候没有创建README.md文件也不要紧,可以在桌面Git中手动创建
git init /**初始化仓库**/
touch README.md
git add README.md
git commit -'first_commit'
git remote add origin 仓库的url
git push origin master
5、上传文件到GitHub


//1.跟踪项目文件夹中的所有文件和文件夹
git add . //(.表示通配所有)
//2.输入本次提交说明
git commit -m'xxxxxxxx'
//3.关联远程仓库,添加后,远程库的名字就是 origin,这是 Git 默认的叫法,也可以改成别的,但是 origin 这个名字一看就知道是远程库。
git remote add origin 仓库url //这一步如果创建README.md文件的时候已经做了就可以跳过
//4.把本地库的所有内容推送到远程库上
git push -u origin master
6、删除GitHub上的文件/文件夹
git rm 文件名 /git rm -r 文件夹名
git commit -m'删除描述'
7、建立、合并和删除分支
7.1 git branch -a 查看当前项目的所有分支
7.2 git branch brancheName 创建新的分支 ,比如 git branch dev
7.3 git checkout brancheName 切换分支 ,比如:git checkout dev
7.4 git checkout -b brancheName 创建+切换到新分支 ,比如:git checkout -b dev
7.5 在master分支下,合并dev分支下的提交
git meger dev
7.6 git branch -d brancheName 删除分支,比如:git branch -d dev
8、多人协作与推送分支
8.1 新建分支
git push origin branchName 把分支推送到远程,比如新建了一个分支叫Huangxin,并把它push到远程上去
8.2 抓取分支
多人协作时,大家都会往master分支上推送各自的修改。现在我们可以模拟另外一个同事,可以在另一台电脑上(注意要把SSH key添加到github上)或者同一台电脑上另外一个目录克隆,新建一个目录名字叫target
在新建的目录中点击git bash here ,然后依次git init 初始化文件夹,git remote add origin 目标远程库URL 连接 ,git clone 目标远程库URL 把原有的项目导下来。之后我们要在原有的Huangxin这个分支上进行开发,那么我么可以这么做:
git checkout -b MyBranch origin.Huangxin
执行上面的语句后,我们就可以在Huangxin这个原有的分支上开发了,修改完成后要提交你的分支到远程:
git push origin MyBranch
如果没有问题的话,那就推送上去了。但是会有这么一种情况: 协作的伙伴已经向origin/Huangxin分支上推送了提交,而我在我的目录文件下也对同样的文件同个地方作了修改,也试图推送到远程库时,这是就会报错filed to push some refs to htttps://xxx,这就是提交的内容发生冲突了,解决的办法是: 先用git pull把最新的提交从origin/Huangxin抓下来,然后在本地合并,解决冲突,再推送。
如果git pull 失败了, 原因是没有指定本地MyBranch分支与远程origin/Huangxin分支的链接:
git branch --set -upstream MyBranch origin/Huangxin
然后在git pull 就会成功。pull成功后手动修改不一样的地方,再次用git push origin MyBranch推送到远程
总结
多人协作工作模式一般是这样的:首先,可以试图用git push origin branch-name推送自己的修改.如果推送失败,则因为远程分支比你的本地更新早,需要先用git pull将远程分支上较新的更改拉取下来,在本地合并冲突。之后再用git push origin branch-name推送