配置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对象的路径。
新增
- sudo apt-get install git-lfs 先安装Git LFS
- git lfs track LemallSDK.a 将这个超大的静态库加入LFS的管理列表
- git lfs track 查看管理情况
- git add .gitattributes gitattributes就是表述LFS管理列表的,要将它加入缓存区
- git add LemallSDK.a 还有这个超大文件
- git commit -m “added LemallSDK.a” 提交
- git lfs ls-files 查看等待commit的LFS的缓存区
- 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