Git最佳实践

Vincent Driessen 写的这篇A successful Git branching model很好的阐述了Git的最佳实践。

使用中央仓库作为整体的系统,使用主干——分支系统,具有真实的中央存储库。将中央存储库命名为origin。

所有的开发人员拉去和推送都到origin,开发人员不止可以从中央库pull和push代码,同样可以从其他开发人员的分支上push和pull代码。

主分支

2018/11/7 posted in  git

码云创建新项目

# 1. 建立本地git仓库
# cd到你的本地项目根目录下,执行git命令
git init

# 2. 将本地项目工作区的所有文件添加到暂存区
git add .
#.表示所有文件
#如果想添加项目中的指定文件,那就把.改为指定文件名即可

# 3. 将暂存区的文件提交到本地仓库
git commit -m ""
# 冒号里面写注释语句

# 4. 在码云上创建自己的项目,创建如图所示

# 5. 将本地仓库关联到码云上
git remote add origin https://gitee.com/gkh520/TravelMaster.git 
# 后面的URL地址就是我在第四步时复制的那个https地址
# 如果已经存在路径
那就先输入  git remote rm origin 
再输入     git remote add origin https://gitee.com/gkh520/TravelMaster.git  就不会报错了。

# 6. 最后一步,将代码由本地仓库上传到Github远程仓库

git push -u origin master
#如果报failed to push some refs to git 错误出现错误的主要原因是码云中的README.md文件不在本地代码目录中
# 可以通过如下命令进行代码合并【注:pull=fetch+merge]
git pull --rebase origin master

一些Git常用命令

最后分享一些Github常用的命令:
切换分支:git checkout name

撤销修改:git checkout – file

删除文件:git rm file

查看状态:git status

添加记录:git add file 或 git add .

添加描述:git commit -m “miao shu nei rong”

同步数据:git pull

提交数据:git push origin name

分支操作
查看分支:git branch

创建分支:git branch name

切换分支:git checkout name

创建+切换分支:git checkout -b name

合并某分支到当前分支:git merge name

删除分支:git branch -d name

删除远程分支:git push origin :name


2018/7/11 posted in  git

git diff文件对比

Git 比较不同版本文件差异的常用命令格式:

git diff 查看尚未暂存的文件更新了哪些部分

git diff filename 查看尚未暂存的某个文件更新了哪些

git diff –cached 查看已经暂存起来的文件和上次提交的版本之间的差异

git diff –cached filename 查看已经暂存起来的某个文件和上次提交的版本之间的差异

git diff ffd98b291e0caa6c33575c1ef465eae661ce40c9 b8e7b00c02b95b320f14b625663fdecf2d63e74c 查看某两个版本之间的差异

git diff ffd98b291e0caa6c33575c1ef465eae661ce40c9:filename b8e7b00c02b95b320f14b625663fdecf2d63e74c:filename 查看某两个版本的某个文件之间的差异

2017/10/19 posted in  git

.gitignore规则不生效的解决办法

在git中如果想忽略掉某个文件,不让这个文件提交到版本库中,可以使用修改根目录中 .gitignore 文件的方法(如无,则需自己手工建立此文件)。这个文件每一行保存了一个匹配的规则例如:

此为注释 – 将被 Git 忽略
 
*.a       # 忽略所有 .a 结尾的文件
!lib.a    # 但 lib.a 除外
/TODO     # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
build/    # 忽略 build/ 目录下的所有文件
doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt

规则很简单,不做过多解释,但是有时候在项目开发过程中,突然心血来潮想把某些目录或文件加入忽略规则,按照上述方法定义后发现并未生效,原因是.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。那么解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:

git rm -r --cached .
git add .
git commit -m 'update .gitignore'
2017/10/18 posted in  git

Coding.net使用和从Github转移项目到Coding.net

coding.net可以使用私人仓库,用起来还蛮顺手的,因为新公司没有搭建GitLab服务器,但是又不想在github上付费开私人仓库。所以新公司项目就被我搭建在了coding.net里面。
搭建过程很简单,但还是写出来吧
一、搭建私人仓库,上传本地代码到仓库
去coding.net注册什么的不表,注册完成后点击创建项目

选择私有

下面那个启用README.md可以先不勾选,直接点击创建

创建完成

然后选择左侧代码~可以看到你的仓库地址

仓库地址

OK,下面在桌面上用Xcode新建一个项目,名称随意。创建完成后打开终端
cd到新建项目里面

touch README.md//新建一个记录提交操作的文档
git init //初始化仓库
git add README.md //添加README.md
git add * //检查所有项目
git status //检查状态 都为绿色证明是对的
git commit -m "first commit"//提交到本地仓库 first commit为提交说明
git remote add origin
https://git.coding.net/cc412/Test.git //连接远程仓库 创建一个origin的别名
git push -u origin master //将本地仓库提交到origin下的master分支下
进行上面步骤

上传成功
返回到coding.net 进入Test项目

上传成功了
如果输出
fatal: remote origin already exists.

git remote rm origin
git remote add origin https://git.coding.net/cc412/Test.git
二、git转移
之前公司做的项目在我离职以后已经又推到重来了,旧的代码还托管在github上,现在我要把代码转移到coding.net上,还要保持所有commit记录
操作如下

1.首先找到github的托管地址
https://github.com/***/******.git
2.在coding.net上创建个新的私有仓库
过程同上,只是不用同步本地代码
比如新仓库地址为
https://git.coding.net/cc412/xxxx.git

3.在控制台cd到桌面路径

git clone --bare https://github.com/***/******.git
//--bare 创建的克隆版本库都不包含工作区,直接就是版本库的内容,这样的版本库称为裸版本库。

然后桌面就会出现一个xxxx.git 这就是在github上的项目
4.使用镜像推送的方式上传代码到新的服务器

cd xxxx.git
git push --mirror https://git.coding.net/cc412/xxxx.git
//https://git.coding.net/cc412/xxxx.git 是coding.net仓库地址
5.删除本地代码

cd ..//返回上一路径
rm -rf xxxx.git //干掉
6.从新服务器clone下来

git clone https://git.coding.net/cc412/xxxx.git
OK,大功告成

作者:cc412
链接:http://www.jianshu.com/p/93737d548a3d
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2017/10/17 posted in  git

git 在mac下使用多平台

刚刚看码云Gitee可以提供免费的私有仓库了,5个人一下的小团队免费, 这个在github上现在买着,每个月要21美元,确实挺方便,而且可以免费挂自己的私有代码。

但是到自己等于现在mac上就有github、gitee和公司的git三个平台了,要管理三个还是在这里记录一下。

下载配置git

1. 生成RSA文件

第一步需要生成一个rsa 文件

$ ssh-keygen -t rsa -C "youremail@xxx.com"

回车后填入相应的文件路径,mac系统的话在~/.ssh/ 下面。 可以起一个自己的名字,比如~/.ssh/id_rsa_gitee,其他的也可以使用类似的命名方式,为了进行区分。

gitee上生成公钥

完成之后去查看一下 ~/.ssh/id_rsa_gitee.pub文件,把里面的内容拷贝到gitee的ssh公钥里面去

在mac上注册key

$ ssh-add -K ~/.ssh/id_rsa_gitee

$ ssh-add -l

加上-K 重启之后依然可以生效,下面的可以查看添加结果

配置本地host情况

修改 ~/.ssh/config

Host TestSSH.github.com
    HostName github.com
    User git
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_TestSSH_github
Host YourProjectName.gitlab.com
    HostName gitlab.com
    User git
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_YourProjectName_gitlab

配置用户名和邮箱

$ git config user.name
$ git config user.email

不要带-globle 参数,带上之后就配置到全局了,配置本地即可。

测试配置

执行测试

$ ssh -T git@gitee.com (就是刚刚你给Host取的名字)

敲一下回车,如下出现下面的提示就连接成功了:

$ ssh -T git@gitee.com
Welcome to Gitee.com, yourwilliam!

完了之后就表示配置成功了,这样在不同的目录之间也可以进行切换

初始化Github工程

初始化一个git工程

在相应的工程文件夹下执行git init 来初始化Git工程

$ git init
$git status
On branch master

Initial commit
$ git config user.name yourwilliam
williamtekiMacBook-Pro:gittest valentine$ git config user.email yourwilliam@gmail.com
williamtekiMacBook-Pro:gittest valentine$ git commit -m "asd"
[master (root-commit) 43ca70a] asd
 1 file changed, 2 insertions(+)
 create mode 100644 a.txt

$ git remote add origin git@github.com:onlyanyz/StudyGit.git
$ git push origin master
2017/10/14 posted in  git

git 记录

2017/8/9 posted in  git

MacBook 使用shadowsockets 来访问git clone

国内使用gitclone 也比较慢,有时候慢起来会1K,2K的速度,网页可以直接通过shadowsockets来配置自动代理。但是git走的是其他的,所以需要单独配置,之前配置ubuntu下面的时候是采用的配置socks的方式来配置

首先要查找当前的shadowsockets 的端口情况,可以在编辑规则gfwlist.js中查到如下情况

var proxy = "SOCKS5 127.0.0.1:1080; SOCKS 127.0.0.1:1080; DIRECT;";

可以看到我们的ss proxy的端口在1080,所以直接配置git 的 proxy即可

git config --global http.proxy 'socks5://127.0.0.1:1080' 
git config --global https.proxy 'socks5://127.0.0.1:1080'

配置好后试试git是不是像飞一样。

2017/3/11 posted in  git

专门为Github党打造的超级无敌Chrome插件

作为GitHub党,分享一些好用的Chrome插件,帮助增强Github功能。标题名称在Chrome插件商场搜索,即可安装对应的插件。

1

ZenHub for GitHub

ZenHub是一款集成于GitHub的项目协作与管理工具。最新版的ZenHub已集成于GitHub企业版。

ZenHub提供了一个Chrome扩展插件,当浏览器跳转到GitHub页面时,扩展插件通过向页面注入代码来扩展GitHub的功能。用户不能离开GitHub页面使用ZenHub。除了Chrome,ZenHub开发团队计划还将对使用其他浏览器提供支持。

2

Octotree

GitHub 现有的目录层级形式,在查看来自不同层级文件夹的文件的时候,显得似乎不是很方便,Octotree 这款 Chrome 插件能够让你通过文档库的方式管理、查看你的 GitHub 仓库,简单直观的同时,也方便你进行文件之间的跳转操作。同时支持Gitlab
3

Github Toc

允许你根据 Github 项目的 README 或 WIKI 显示目录( Table of content)。

4

Isometric Contributions

这个插件允许你在普通的 Github 贡献表与等距像素艺术版之间切换,每天提交记录使用图表展示。
5

Avatars for Github

自动的为 GitHub 新闻和 Feed 页面添加显示用户头像。
6

GitHub Dashboard Avatars

自动的为 GitHub 新闻和 Feed 页面添加显示用户头像,与上面的插件雷同。
7

GitHub Helper

这个插件不仅显示用户头像,与上面的插件雷同,还提供其它小功能,仓库文件的图标。
8

GitHub Linker

一个可以链接到 NPM、bower、Composer & Duo 依赖等项目主页的 Chrome 插件。
9

GitHub Selfies

GitHub Selfies 允许你从网络摄像头为你的 requests、issues 以及 comments 添加自拍。
10

Command

使用网络更好的增强斜线“/”命令。命令可以很容易地发送图片、歌曲、自拍emojis,更在任何文本字段。它支持网站GitHub,Gmail的收件箱,和Reddit开箱。
11

GitHub Highlight Selected

当你在 Github 源代码中选中一个词的时候,这个插件会为你高亮显示这个文件中其他相同的词。
12

GitHub Repository Size

自动添加GitHub库存储库的大小,和文件的大小。

13

GitHub Hovercard

鼠标移到头像,仓库链接地址,出现一个悬浮弹出层,介绍详细信息。
14

Omnibox for Github

GitHub命令驱动的搜索框,增强您的浏览器的工具!快速跳转到特定的项目,相关的部分,或用户。
15

Git.io URL Shortener

快速缩短Github.com的任何URL,机遇git.io短链接工具。
16

GitHub Code Folding

在GitHub上查看文件时使用代码折叠。
17

GitHub Markdown Menu

允许你根据 Github 项目的 README 或 WIKI 显示目录( Table of content)。

专门为Github党打造的超级无敌Chrome插件

2017/2/15 posted in  git

git 冲突解决

git 冲突解决

用惯了svn里面的冲突解决就是一门比较复杂的学问,如何做好对比,进行冲突的解决。 来到git中也同样会遇到这样的问题,简单的在生产环境下可以参考一下的方式来解决。

最粗暴的方法

合并所有的文件,将已改动的文件恢复:

    $ git merge --abort

pull 有个 --rebase 参数,直接强制更新:

    $ git pull --rebase

问题

问题: commit your changes or stash them before you can merge.

解决:两种方式

stash方式
    git stash
    git pull
    git stash pop

git stash: 备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。

git stash pop: 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复。

git stash list: 显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。

git stash clear: 清空Git栈。此时使用gitg等图形化工具会发现,原来stash的哪些节点都消失了。

直接省略方式
    git reset --hard
    git pull
2016/6/2 posted in  git

github 使用入门

github git入门

github

几年前就有关注github上一些开源的项目了,但是一直没有心情闲下来去研究一下git。现在git这么火了,前面偶遇jekyll,也顺便的把github初略的入门一下。

mac安装git

git的一大好处就是可以使用命令行。在mac上安装git命令也非常简单,直接输入git后提示安装xcode之后就可以使用了。但是网上传言这种方法的git版本可能有些问题,这个现在暂时还用的不错,后面有空来具体研究研究这种安装方法的问题。

创建一个自己的repository1. 使用页面上的创建创建一个public的 repository

  1. 使用名称yourwilliam/valen_jekyll
  2. 在本地初始化一个git
  3. git init 初始化一个git
    创建一个git分支 git checkout --orphan gh-pages
    使用gh-pages分支是为了使用jekyll的时候使用的,如果需要页面访问就必须使用这个分支。
  4. 提交git

提交git部分代码

    git add .
    git commit -m “first post”
    git remote add origin https://github.com/yourwilliam/valen_jekyll.git
    git push origin gh-pages

提交代码的步骤1. git status 查看修改状态

  1. git pull origin gh-pages 同步库上的内容
  2. git status查看状态
  3. git add . 添加当前未提交内容到本地git仓库
  4. git commit -m "comments" 进行日志提交
  5. git push origin gh-pages将当前本地仓库内容同步到远程仓库

修改提交人

之前提交的时候会报提交人错误

    [gh-pages f9ef6c6] delete the model md, and commit the first blog
     Committer: william valentine <valentine@williamtekiMacBook-Pro.local>
    Your name and email address were configured automatically based
    on your username and hostname. Please check that they are accurate.
    You can suppress this message by setting them explicitly:

git上修改提交人:

    git config --global user.name "Your Name"
    git config --global user.email you@example.com
    git commit --amend --reset-author

删除git上的文件

在Git中,删除也是一个修改操作,我们实战一下,先添加一个新文件test.txt到Git并且提交:

    $ git add test.txt
    $ git commit -m "add test.txt"
    [master 94cdc44] add test.txt 
    1 file changed, 1 insertion(+) 
    create mode 100644 test.txt

一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm命令删了:

    $ rm test.txt

这个时候,Git知道你删除了文件,因此,工作区和版本库就不一致了,git status命令会立刻告诉你哪些文件被删除了:

    $ git status
    # On branch master# Changes not staged for commit:
    #   (use "git add/rm <file>..." to update what will be committed)
    #   (use "git checkout -- <file>..." to discard changes in working directory)
    #
    #       deleted:    test.txt
    #
    no changes added to commit (use "git add" and/or "git commit -a")

现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且commit:

    $ git rm test.txtrm 'test.txt'
    $ git commit -m "remove test.txt"
    [master d17efd8] remove test.txt 
    1 file changed, 1 deletion(-) 
    delete mode 100644 test.txt

现在,文件就从版本库中被删除了。

git ignore

在仓库目录下新建一个名为.gitignore的文件

【例子】

忽略.o和.a文件```

*.[oa]
# 忽略*.b和*.B文件,my.b除外
*.[bB]
!my.b
# 忽略dbg文件和dbg目录
dbg
# 只忽略dbg目录,不忽略dbg文件
dbg/
# 只忽略dbg文件,不忽略dbg目录
dbg
!dbg/
# 只忽略当前目录下的dbg文件和目录,子目录的dbg不在忽略范围内
/dbg


###持续更新
* 当仓库同时由添加和修改的时候使用git add . 可能会出现错误。当仓库中由删除修改时,仅使用git add不能相应删除的文件,所以推荐使用git add -all . 来适配删除的文件,这样也会被删除进行提交。
* 
2015/5/6 posted in  git