GITHUB

Pull Request

  1. Pull Request是指开发者在本地对源代码进行修改后,向github中托管的git仓库请求合并的功能。

对特定用户进行评论

  1. @用户名,对方就可以接到通知,查看Issue

  2. @组织名/团队,可以让该团队的所有成员收到通知。

  3. 用户名/仓库名# 编号,链接到指定仓库所对应的Issue编号。# 编号,连接到当前仓库对应的Issue编号。

Github Flavored Markdown

  1. github中,所有文字输入功能都可以用Github Flavored Markdown(GFM)语法进行描述。还可以在评论中添加文字表情。

社会化编程(SOCIAL CODING)

  1. 不要闭目塞耳,要接触不同的文化。注意社区那些日新月异的源代码、技术、设计以及文化,会对自己编写的源代码成果带来巨大影响。

  2. 看facebook、twitter能了解一个人的品行,而看github能了解一个程序员的实力。

  3. 在github上,看New Feed可以看到你关注的人正在做的开发,能同时关注代码与人。

github提供的主要功能

  1. git仓库,免费建立任意个github提供的git仓库。

  2. Organization,使用公开仓库可以免费创建organization账户,以交流群或者IT小团体形式进行软件开发可以试试。

  3. Issue,将一个任务或问题分配给一个Issue进行跟踪和管理的功能。在github上,没当进行pull request都会同时创建一个Issue。在Git 的提交信息中写上Issue 的ID(例如“#7”),GitHub 就会自动生成从Issue 到对应提交的链接。

  4. WiKi,这个功能常用在开发文档或手册的编写中(GFM语法)。通过wiki功能,任何人都能随时对一篇文章进行更改和保存,因此可以多人共同完成一篇文章。wiki也是作为git仓库进行管理的。

  5. pull request,通过pull request功能向别人的仓库提出申请,请求对方合并。还可以对pr和源代码差别进行评论。

GIT的导入

  1. 版本管理:就是管理更新的历史记录。

  2. 版本管理系统:集中型,分散型。

  3. 集中型:将数据集中放在服务器之中,只存在一个仓库,有利于管理。但一直需要网络,否则无法获取最新的源代码。服务器故障就导致数据消失。
    2018-10-29-15-50-24

  4. 分散型:将仓库fork给每一个用户,fork出来的仓库与原仓库是两个不同的仓库,开发者可以对fork出来的仓库随意编辑。
    2018-10-29-15-53-13
    由于本地的开发环境就有仓库,所以不必连接到远程仓库就可以进行开发。

  5. 设置姓名和邮箱地址:

    1
    2
    $ git config --global user.name "Firstname Lastname"
    $ git config --global user.email "your_email@example.com"
  6. 设置SSH Key:github上连接已有仓库时的认证是通过使用SSH的公开秘钥认证方式进行的。
    $ ssh-keygen -t rsa -C "your_email@example.com",id_rsa是私有秘钥,id_rsa.pub是公开秘钥。在github中添加公开秘钥(id_rsa.pub),今后就可以用秘钥进行认证了。

  7. watch功能获取最新的开发信息。如果你经常使用某个软件或者框架进行开发,可以去watch一下。

github以及git命令的使用

  1. README.md:一般会在这个文件中表明本仓库所包含的软件的概要、使用流程、许可协议等信息。

  2. .gitignore,这个文件用来描述git仓库中不需要管理的文件与目录。

  3. clone已有仓库:git clone URL

  4. 查看当前的仓库的状态: git status

  5. 将文件添加到暂存区【文件提交之前的一个临时区域】:git add filename

  6. 将文件提交到仓库:git commit -m "msg"【加-m表示简述一条提交信息,不加则需要详细信息。】

  7. 查看提交历史【包括提交或合并,以及前后的差别】:git log

    --pretty=short,只让程序显示第一行简述信息;
    <file>,只显示该目录或文件的历史;
    -p,显示提交前后的差别;
    --graph,以图表形式查看分支

  8. git diff,查看工作树、暂存区、最新提交之间的差别。的差别【HEAD,查看与最新提交的差别。】

  9. 提交到github中:git push

  10. 公开时的许可协议:有BSD,Apache许可协议,最常用的是MIT许可协议。实际使用时,只需将LICESE文件加入仓库,并在README.md文件中声明使用了何种许可协议即可。

实际操作——GIT

  1. 初始化仓库:git init,会生成一个.git目录,可以称这个目录为“附属于该仓库的工作树”,用于管理文件的历史快照。

分支的操作

  1. 不同分支中,可以同时进行完全不同的作业。等该分支的作业完成之后再与master分支合并。
    2018-10-29-17-57-42

2018-10-29-17-58-44

  1. 显示分支表:git branch,星号表示我们当前所在的分支。

  2. 创建、切换分支:git checkout -b branchName[切换则不用-b,-是切换回上一个分支]

  3. 只要创建多个分支,就可以在不互相影响的情况下同时进行多个功能的开发。

  4. 特性分支(Topic branch):当今大部分工作流程都用到了特性分支。特性分支是集中实现单一特性(主题),除此之外不进行任何作业的分支。在日常开发中,往往需要创建多个特性分支,同时在此之外再保留一个随时可以发布软件的稳定分支。稳定分支通常就是master分支了。我们创建了feature-A,除了对feature-之外不进行任何作业。即便在开发过程中发现了BUG,也要再创建新的分支进行修正。
    2018-10-29-18-13-40

  5. 基于特定主体的作业在特性分支中进行,主体完成后再与master分支合并。只要保持这样的开发流程,就能保证master分支可以随时供人查看。其他开发人员也能放心从master分支创建新的特性分支。

  6. git merge——合并分支:假设我们的feature已经是实现完毕,想要将他合并到主分支master中。步骤如下:
    先切换到master分支:git checkout master
    再进行合并feature-A分支:git merge --no-ff branchName[–no-ff表示在历史记录汇总明确记录下本次分支合并]
    以图表形式查看分支:git log --graph

更改提交的操作

  1. 借助分散仓库的优势,可以在不影响其他仓库的前提下对历史版本进行操作。以下创建一个fix-B用于回溯历史版本。
    2018-10-29-18-41-08

  2. 回溯到指定的状态:git reset --hard hashValue【哈希值只要输入4位以上就可以执行】

  3. git reflog:查看当前仓库的操作日志。跟git log的区别在于,git log只能查看当前分支状态为重点的历史日志。用reflog恢复到回溯前的历史状态。
    2018-10-29-18-58-40

消除冲突

  1. ========以上的部分就当前HEAD的内容,以下部分就是想要合并的分支的内容,需要解决冲突,不然无法完成合并。解决冲突后在提交一次。

  2. 修改上一条提交信息:git commit --amend

压缩历史

  1. 压缩历史:提交一个修改,然后将这个修改包含到前一个提交中,压缩成一个历史记录。

  2. git rebase -i HEAD~2,选定当前分支中包含HEAD(最新提交)在内的两个最新历史记录为对象,也就是把两个请求合为一个请求,将pick改为fixup

推送至远程仓库

  1. 远程仓库,是与我们本地仓库相对独立的另一个仓库。

  2. 添加远程仓库: git remote add origin url

  3. 推送到master分支:git push -u origin master
    注意:空目录不可以push

  4. 推送至master以外的分支:git push -u origin branchName

    关于git push 需要注意的点:
    1.如果是第一次推送则必须加上-u origin branch,加了-u下次就可以直接push了
    2.如果是从远程仓库中获取下来则表示已经跟远程仓库连接上了,直接push就可以

  5. 使用HTTPS协议添加仓库,每次push都要输入密码。使用SSH协议则不用。

  6. git remote -v查看git远程推送的方式。

从远程仓库获取

  1. git branch,查看当前分支的相关信息,添加-a参数可以同时显示本地仓库和远程仓库的分支信息。

  2. 获取远程分支,git checkout -b branchName oringin/branchName【第一个branchName是本地仓库的分支名】

获取最新的远程仓库分支

  1. git pull origin branchName获取最新的远程仓库分支
    【git pull需要注意的地方和git push同理,除了第一次更新,其他直接pull即可】

GITHUB网站功能

  1. 站内可以用快捷键(shift+/查看快捷键)

  2. Explore,介绍热门的软件

  3. Gist,用于管理以及发布一些没必要保存在仓库中的代码,比如笑的代码片段。

  4. wiki,记录开发者之间应该共享的信息或者软件文档。

  5. pulse,显示仓库最近的活动信息。

  6. releases,显示仓库的标签列表。

  7. RAW,通过HTTPS协议获取文件。

  8. Blame,按行显示最新提交的信息。

  9. 通过修改URL查看差别

  10. issue可以通过标签(label)来进行整理。

  11. 还可以添加里程碑来管理issue。

  12. 在仓库根目录添加CONTRIBUTING.md文件,可以在描述issue的时候显示出来,用以规范issue的内容。

  13. Tasklist语法

    1
    2
    3
    4
    # 本月要做的任务
    - [x] 完成图片
    - [ ] 完成部署工具的设置
    - [ ] 完成抽签功能
  14. Close Issue,如果一个处于open状态的issue已经处理完毕,只要在提交中以下列格式描述提交信息,对应的issue就会被close掉。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    fix #1
    fixes #1
    fixed #1
    close #1
    closes #1
    closed #1
    resolve #1
    resolves #1
    resolved #1

WIKi

wiki在git仓库中有自己的git管理,需要clone,在本地开发再push

pulse

体现仓库软件开发活跃程度的功能

Pull Request

Pull Request 是用户修改代码后向对方仓库发送采纳请求的功能。这个功能使众多开发者能协同合作。

2018-10-30-19-19-36

  1. 养成创建特性分支后再修改代码的好习惯。在github上发送pull request时,一般都是发送特性分支。

  2. 一般PR过程,Fork到本地,修改完成再发送PR。

  3. 在开发过程中发送PR进行讨论,Fork到本地,修改一部分就立刻发送PR,跟作者进行交流,添加WIP表明正在开发中。提交过的PR,下次再push一样是直接在PR中更新。

  4. 不进行Fork直接从分支发送PR【需要团队编辑权限】

如何让源代码仓库保持最新状态

  1. 通过git fetch命令获取最新的数据。需要配合git merge使用。[用在fork和clone的仓库]

日常git命令

  1. 修改分支名称:git branch -m old new