Git 笔记

2017/03/02

配置Git

git 是靠SSH链接 先要在本地生成ssh的public key
ssh-keygen -t rsa -C “email.com”
并将 这个key 复制到添加到github上。才能成功链接GitHub。
(如果是自己的服务器需要ssh连接,要将publickey添加到ssh的目录里的authorized_keys中
cat id_dsa.pub >> ~/.ssh/authorized_keys)
git clone github.com/callmebill/helloworld
git init
git add .
git commet -m “what is update”
git push
git diff  查看更新变化
git status 查看当前状态
git log 查看提交的记录
git reset —hard HEAD^  // HEAD^^  HEAD~100  回滚到上一个历史版本
git reset —hard ed123413  //回滚到指定一个提交版本
git reflog 查看所有命令的记录
git checkout — file  恢复谋文件从缓存区或者工作区
git rm file  删除file的索引

GitHub的各种工作流的对比

1 集中式工作流 Git flow:适合客户端开发,最新代码优先于发布很久。 两个支线 dev 和 master , 用dev 做开发,测试成功后合并到master发布版本。有三种短期分支 功能/补丁/预发,开发完马上合并到dev或master上。 优点:清晰可控 适合从svn过度 缺点:要同时维护两个分支,很多工具将master当做默认分支

2 功能分支工作流 GitHub flow :适合服务器这种持续发布开发,只有一个master长期分支,要想更改代码就拉出分支 (git check -b new-feature),分支完成后想master发送pull request。而且可以生产讨论,code review环境,一旦被接受就合并到master。一定要先拉出分支,才能有pull request

3 Gitlab flow:将上面两种方法合并到一起,用master做最新代码去持续发布,用发布分支来延时发布,每个版本都有一个分支,当生产环境的发布版本代码出bug。先从master上创建一个修复分支,修改了bug后,合并到master上,合并冲突解决后,将提交的commit,用 cherry-pick第二次提交到对应版本的发布分支上。 适合大型项目。清晰严格的分支管理

github clone下来的代码 默认是它的master分支,如果想切换他的别的分支怎么办?

假如需要其他分支则需要 git clone -b ”branch-name“ https://github.com/callmebill/HelloGolang。 远程分支 是对远程仓库中的分支的索引,他们是一些无法移送的本地分支,只要不联网,他们就一直停在那里,提醒着上次连接远程仓库时的位置 。 第一次clone 远程仓库到本地后,git会在本地建立 (远程) origin/master 和 (本地)master两个分支。都指向origin/master 的最后一次提交。并建立追踪关系track,就会收到远程更新的通知。

git checkout —track origin/newbranch 在本地切换 github上的远程分支,然后就可以继续在这个newbranch开发。 因为设置了跟踪,git会自动收到更新通知,git push 也会push到newbranch上。

如何在Github上创建一个New Repository时,将本地的代码提交上去。

git init
git remote add origin  https://github.com/callmebill/callmebill.github.io.git
git push -u origin master
出现错误:
error: src refspec master does not match any.
原因 :
是应为不能.git中未添加任何信息不能提交空文件。
修改:
git add .
git commit -m “init files"
git push

参考

功能分支的PR实践

  • 先Fork主项目到自己的Github PR要求分支不同或者库不同
  • 做一些修改比如add README.md
  • 点击自己的 Github Project 的 New Pull Request 按钮
  • 选择要将改变提交到哪一个目标库的目标分支 会出现所有同源的库
  • 再次查看Review自己的修改记录
  • 点击 Create pull request
  • 填写自己的 修改建议or 更新日志 ,后提交。
  • 等待目标库的拥有者 查看提交的PR 并 Approve通过
  • 在审核PR审核期间可以参与评论和修改代码。

Git LFS 大文件管理

Git LFS向Git中添加了一条新命令lfs,支持以下参数:

  • config:显示Git LFS的配置。
  • init:初始化Git LFS。
  • logs:显示git-lfs中的错误。
  • track:向Git仓库中添加一个大文件;允许指定文件扩展名。
  • untrack:从Git LFS中移除一个文件。
  • push:把当前监控的文件推送到Git LFS服务器。
  • status:显示产生改动的Git LFS对象的路径。

新增

  1. sudo apt-get install git-lfs 先安装Git LFS
  2. git lfs track LemallSDK.a 将这个超大的静态库加入LFS的管理列表
  3. git lfs track 查看管理情况
  4. git add .gitattributes gitattributes就是表述LFS管理列表的,要将它加入缓存区
  5. git add LemallSDK.a 还有这个超大文件
  6. git commit -m “added LemallSDK.a” 提交
  7. git lfs ls-files 查看等待commit的LFS的缓存区
  8. git push 提交

更新

$ git tag one
$ echo this is a large file >> cat.bin //做一些更新
$ git add .gitattributes //将管理列表添加至缓存
$ git add cat.bin //将超大文件添加至缓存
$ git commit -m "updated cat.bin"
$ git lfs ls-files
>>> bfa3dd54e6 * cat.bin
$ git push

删除

$ git rm cat.bin
>>> rm 'cat.bin'
$ git rm .gitattributes
>>> rm '.gitattributes'
$ git commit -m "removed cat.bin"
$ git push

卸载

git lfs uninstall

参考1 参考2

参考:

Post Directory