本文适用前提:1. 本地有git工具;2.github账号
一、将代码放入本地仓库:
第一步:在本地项目文件夹,右键点击git bash:
第二步,使用如下命令将本地文件初始化成本地git仓库:
git init
在这一步之后,在本地文件夹中将会出现一个.git文件,就是本地仓库的配置文件,很重要。
第三步,使用如下命令对本地代码进行缓存,注意此时代码还没有进入本地仓库:
git add .
这一步有可能没有反应也可能出现上面的情况,都是正常的,warning可以忽略。
第四步,使用如下命令将项目代码提交到本地仓库:
git commit -m'描述'
到这一步,代码就已经存储在本地仓库了。
二、搭建远程仓库:
登录github账号,进入自己的仓库,新建一个远程仓库:
按照自己的需要进行设置,然后点击创建即可:
创建之后有一个项目地址,复制一下之后会用到。
三、将本地仓库和远程仓库进行连接并首次提交代码:
注:因为后续修改,本章中git命令行中的文件名称可能与上面的文件名不一致,大家只要记住都是在一个文件夹(项目文件夹)下操作git就可以了。
第一步:ssh配置
在建立连接之前,要先进行ssh配置,否则会报如下错误:
原因:
Permission denied (publickey) 没有权限的publickey ,出现这错误一般是以下两种原因:一是客户端与服务端未生成 ssh key;二是客户端与服务端的ssh key不匹配。
解决办法:
重新生成一次ssh key ,服务端也重新配置一次即可。
客户端配置(即我们自己的本地服务器):
1. 客户端生成ssh key
ssh-keygen -t rsa -C "邮箱"
改为自己的邮箱即可,途中会让你输入密码,不需要管,回车即可,会生成你的ssh key。(如果重新生成的话会覆盖之前的ssh key)
2.执行如下语句:
ssh -v git@github.com
最两句会出现以下语句:
3. 执行以下语句:
ssh-agent -s
4.执行:
4-1
ssh-add ~/.ssh/id_rsa
可能会出现“Could not open a connection to your authentication agent.”
这时可以使用:
ssh-agent bash
然后再次使用4-1命令
就没问题了:
Identity added: ...ssh key文件路径的信息
服务端配置(github远程):
打开刚刚生成的id_rsa的pub文件,将里面的内容复制,进入你的github账号,在settings下,SSH and GPG keys下new SSH key,然后将id_rsa.pub里的内容复制到Key中,完成后Add SSH Key:
将上面客户端配置中的id_rsa文件中的信息(ssh key)复制到key中即可:
验证Key
ssh -T git@github.com
至此,ssh就配置完成了。
ssh配置好之后,就可以进行本地仓库和远程仓库的连接了。
第二步,建立连接:
执行以下语句(将第二步在github上创建的项目地址(ssh地址)复制到这里进行连接):
git remote add origin git@github.com:T1F0/project-practice.git
这样本地仓库和远程仓库之间就建立了连接,就可以push代码到远程仓库了。
第三步,提交代码到远程分支:
git push -u origin master
这样就将本地代码提交到了远程仓库的master分支上:
四、创建分支,进行多人协作开发:
分支分为本地分支和远程分支:本地分支就是在自己的开发工具(或服务器)上的分支,远程分支就是在git版本管理工具(github、gitlab)中的分支。
4.1 创建本地分支
在项目中,一般远程的分支不只有一个master,因此,需要新建其他的分支进行同步协作开发,首先在本地新建一个dev分支(名字任意):
git branch dev
这里可能会出现问题:
$ git branch devfatal: not a valid object name: 'master'
这个问题一般是在新建git项目或刚为已存在项目创建了git仓库,想用git branch dev创建dev分支或用git checkout -b dev创建并切换到dev分支时报错。
原因:刚创建的git仓库默认的master分支要在第一次commit之后才会真正建立,否则就像你声明了个对象但没初始化一样。
解决办法:先git add .添加所有项目文件到本地仓库缓存,再git commit -m ""提交到本地仓库:
$ git commit -m "初始化,首次提交"On branch master Initial commit nothing to commit (create/copy files and use "git add" to track)
注意上面虽然显示Initial commit,但是还是没有提交上任何文件(nothing to commit),这样还是不能新建分支,即初始化没有完成,亲测一定要显示commit的序列号(如下面0446161),这时就可以对git仓库创建或切换分支了:
[master (root-commit) 0446161] 初始化首次提交
然后查看分支:
git branch
这里看到除了默认的master分支还有一个刚才新建的dev分支。
4.2 创建远程分支:
创建远程分支可以在github或gitlab中进行操作:
创建之后git pull拉取一下:
$ git pull
From https://xxx
* [new branch] dev -> origin/dev
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.
git pull <remote> <branch>
If you wish to set tracking information for this branch you can do so with:
git branch --set-upstream-to=origin/<branch> dev
4.3 本地分支与远程分支连接(建立联系),将本地分支提交到远程分支:
git push --set-upstream origin dev
或:
git push origin dev
这时进入github仓库已经有dev分支了,这样就可以将dev分支进行独立的提交与合并了。
五、后续开发更新项目:
当以后需要更新项目的时候有四步需要走
第一步:执行git pull
命令将GitHub上的代码当下来合并代码,防止提交新代码的时候起冲突
第二步:执行git add
命令将代码添加到仓库
第三步:执行git commit
命令将代码提交到仓库
第四步:执行git push
命令将代码提交到GitHub
六、项目开发中的git拉取、提交与合并流程:
在切换到远程分支之后,要新建本地分支与远程分支建立映射:
在个人经历的项目开发中,一般是将master分支作为最后提交的万无一失的分支,所以日常代码的修改是不会申请提交到master的,一般是新建一个dev分支,将dev分支作为开发主分支进行使用,一般每个开发成员会有一个子分支,每当有阶段性的功能实现时,开发成员会进行提交,新建一个merge请求到dev分支,也就是请求合并到dev分支,进行冲突的解决和项目成员之间的沟通(因为经常存在多人改一个文件的情况)后,视情况将其合并到dev分支。
七、git使用过程常见bug及问题:
用git push到远程remote的时候一直卡住解决方法:
解决方法是:
1. 添加sendpack.sideband属性并置为false
全局的:git config –global sendpack.sideband false
仓库的:git config –local sendpack.sideband false
2. 先git pull一下
虽然当前明明已经是up-to-date,再git push 就没问题了