github是代码管理的利器,他可以帮助你管理项目代码,如果你有开源项目,希望大家一起帮你完成,那么Github一定是首选。
作用
学一样东西应该先了解,它解决了什么问题,根据问题去思考他问什么要这样处理
- 解决了多人开发,代码共享的问题
- 解决了代码版本控制的问题。
- 解决了开源项目,代码冲突的问题。
- 可以集成到测试工具里面
入门
去github 官网注册一个自己的账号
输入邮箱密码。。。。下一步
创建一个代远端库
两种方式,看图
初始化
ssh配置
*** 为什么要配置ssh呢 ***
问得好,因为不配置的话,谁都有权限提交代码到你的远程库,那你的代码和JN有没有区别
也可以用HTTPS的方式 克隆代码,每次提交到远程的是时候,需要输入账号密码(奔溃)
配置好ssh之后,就不需要每次都输入账号密码了
*** mac下 ***
先配置一个git 邮箱和姓名
$ git config --global user.name "thunderqin"
$ git config --global user.email "549458812@qq"
配置好之后,执行下面的命令,得到密钥,就好像童话传说里面,开门需要一个口令密码,比如芝麻开门
ssh-keygen -t rsa -C “549458812@qq.com”
连续按三个确认,得到id_rsa和id_rsa.pub文件
把id_rsa.pub的里面的密钥复制到git官网上面
然后就可以愉快的写代码了。
常用命令
** 克隆 **
进入自己的开发目录
git clone git@github.com:thunderqin/wx_app.git
这段代码不仅会把远端的README 克隆下来,还会将目录和远程建立联系 可以直接Push
** 添加修改 **
创建一个index.js文件
touch index.js
我们需要先添加修改到缓存区
git add index.js
提交
git commit -m 'add index.js'
发布
git push origin master
黑科技
- 每次clone的时候,会把根目录wx_app下载过来,但是有时候不想要这个根目录,怎么办呢?
需要设置当前目录的remote地址
首先初始化
git init
设置远端地址
git remote add origin git@github.com:thunderqin/wx_app.git
这样就可以直接pull代码了
git pull origin master
但是问题是每次拉取提交都需要指定分支 origin master
写多了就烦了
解决方法就是设置默认上游分支
git branch --set-upstream-to=origin/master master
这段代码的作用就是 把当前分支(master)指向远端master分支
这样pull或push就不需要指定分支了
其他常用命令
- git status 对比本地和缓存区的修改
- git commit --amend -C HEAD 本次提交追加到上次Log
- git log 查看提交日志
- git diff a.js b.js 查看a和b的不同
- git merge b 把b分支合并到当前分支
思考
- 和svn最大的区别是多了一个缓存区,为什么需要这个缓存区,直接Push不可以吗
答: 因为缓存区可以在你本地形成一个Log树,记录你所有的操作,你从远端fetch代码,也是存在缓存区,
而不是直接拉取到你本地。你可以把缓存区当成一个分支,就这么简单,有利于代码的管理。
- fetch 和 pull的区别
每次修改代码之前需要执行
git pull origin master
** pull = fetch + merge **
fetch: 把远程的代码,合并到缓存区里(这个时候本地是没有任何修改的)
merge: 合并缓存区和本地代码
- 提交时候,提示冲突,怎么解决
这种情况很可能是你开发的时候 没有pull最新代码 冲突了 解决的办法就是手动解决
*** 举个栗子 ***
<<<<<<< HEAD
code in master
=======
code in dev
>>>>>>> dev
**' <<<<<<' ** 代表冲突的开始
'>>>>>' 代表冲突的结束
把这段代码改成正确的代码就行,然后再次提交
- git rebase temp
新手老是搞不懂什么时候用rebase,这样说吧,你的commit 中和服务器中的有些commit不再同一时间轴上,即:你的有些commit要插入到服务器中的某些commit之间,这样就会造成代码的冲突。
解决的办法就是,新建一个分支temp,然后把temp的代码rebase过来,这样就保证项目的Log是在一个时间轴上。
著作权声明
原文地址: npm 模块开发教程 | 覃国雷的博客