系统默认
Mac上装了xcode,会自带git,但一般版本比较旧。用命令which git,查看当前使用git安装的目录。 默认是安装在/usr/bin/git。
下载安装
从git-scm下载,安装最新版本的git,安装目录为/usr/local/git。
版本管理
使用命令open
打开.bash_profile 文件,添加 export PATH=/usr/local/git/bin:${PATH},从而使得新版本到安装目录被优先搜索到。
在Mac中使用brew
安装gradle
,则gradle
目录为/usr/local/Cellar/gradle/2.12/libexec
(其中2.12对应的是版本号)
在IntelliJ IDEA中使用本地的gradle时,需要安装上述目录去设置。
在Git中,branch就是一个轻量级的file(40个字节),有一个特殊的指针HEAD
来指示Git位于哪个分支。
和其他版本控制软件相比,Git分支是轻量级的,鼓励多用分支。
例如,在某个仓库下运行下来命令,可以看到这个仓库下有2个分支:master,testing,同时HEAD是指向master的,即当前工作的分支为master
1 | $ git log --oneline --decorate |
1 | git branch testing // 创建分支testing,但是仍在原先分支下 |
上述两条命令可以合并成一条命令:
1 | git checkout -b testing |
和创建相比,多了一个option:-d
1
git branch -d testing
例如,master分支合并testing分支
1 | git checkout master // 如果不在master分支下,需要先switch到master分支 |
把testing上改变rebase到master上面
1 | git checkout testing |
rebase
和merge
最后得到的新的snapshot是一样的,但是rebase
可以得到a cleaner history(看上去history是一个串行的记录过程)。 而merge
看到的history中间有分支然后再合流成一个(在merge的点)
把仓库里面的分支list出来:
1 | git branch |
1 | git branch -v // 查看每个branch的最后一次commit |
Git中标签有两类:
使用-a
:1
git tag -a v1.4 -m "My version 1.4"
1 | git tag v1.4 |
查看有哪些tag:
1 | git tag |
查看某个tag的信息:
1 | git show v1.4 |
Push命令不会自动把Tag信息包含,需要自己制定1
2git push origin v1.5
git push origin --tags // 所有的tags
需要新建一个新的branch,然后指定tag:1
2git checkout -b [branchname] [tagname]
git checkout -b version2 v2.0.0
1 | git clone https://github.com/schacon/ticgit |
1 | git remote |
如果需要查看远程仓库更详细的信息,可以使用:
1 | git remote show [remote-name] |
添加1
git remote add <shortname> <url>
移除1
git remote rm remote-name
改名1
git remote rename OldName NewName
1 | git fetch [remote-name] |
两个差别是:fetch只获取新数据,而pull除了获取新数据,还会把新数据主动与当前工作的分支进行合并。
1 | git push [remote-name] [branch-name] |
有两种方式:
1 | git init |
上述命令创建了一个仓库,但是并没有把当前目录下面的文件都加入仓库,即还是一个空仓库,后续还需要 git add *.*
, git commint -m 'xxxx'
等命令
1 | git clone url [newName] |
如果没有newName,则克隆的名字与原先仓库一样。
上述命令包含了几个操作:
在Git中,文件主要分为三种状态
1 | git add xx.xx |
1 | git commit -m 'coments and messages` |
使用git commit
的同时添加参数-a
,会自动把所有被tracked的文件的改动都自动stage,然后再递交:1
2git commit -a
git commit -a -m 'add xxxx'
可以详细列出处于各种状态的文件:1
git status
上述信息如果嫌过多的话,可以使用short形式1
2git status --short
git status -s
输出分为两列
显示staged以后做的修改的部分,如果staged以后,没有修改,则此命令没有输出。
1 | git diff |
如果需要看staged中的修改部分,即哪些修改后续将会进入commit,需要添加参数:
1 | git diff --staged |
项目当前目录下,修改文件.gitignore
,一些规则如下:
a/**/z
,匹配下面各种情况a/z
,a/b/z
, a/b/c/z
等 build/
即 build
目录下面所有文件 doc/**/*.pdf
:doc
目录下,所有的pdf文件##查看Log
1 | git log // 最新的先显示 |
从Git中移除,并且从working directory里面删除对应文件:
1 | git rm xxx.yy |
1 | git mv name1 name2 |
上述命令等价于下面三个命令:
1 | mv name1 name2 |
1 | git commit --amend |
1 | git reset HEAD xxxxxx |
1 | git checkout --xxxx.txt |
Git帮助命令有三种形式:
第一种的方式,与go语言一样,可以统一记忆,更方便。运行命令后,会自动打开浏览器,看到详细的manpage。
Git使用 git config
来进行配置。按照控制范围来说,Git配置分为三层:
.git/config
git config
~/.gitconfig
或 ~/.config/git/config
git config --global
/etc/gitconfig
git config --system
上述三个层级,范围小的层级会override范围大的层级,即上面的配置可以override下面的配置。
1 | git config --global user.name "shizhihua" |
1 | git config --global user.email xxxyyy@gmail.com |
如果不进行设置,Git会使用系统默认的文本编辑器。
1 | git config --global core.editor emacs |
在win下面,-multiInst -nosession
需要,否则会出错。
1 | git config --list |
上述命令会列出所有的配置。
如果需要列出某个key的配置值,可以利用下面的命令git config <key>
:
1 | git config user.name |
通过设置,可以制定一些命令的简写方式,例如:
1 | git config --global alias.co checkout |
则下面一些命令就可以简写如下:
1 | git co // git checkout |
在Go中,如果map联合struct使用需要注意。
下面程序编译出错,因为 a[1].x =3
无法编译通过,信息为:cannot assign to a[1].x
1 | package main |
如果map类型改为slice类型,则程序没有问题
1 | func main() { |
如果还要使用map类型,同时保持类似处理流程,则需要使用*struct,具体程序如下:
1 |
|
在Java程序中,经常需要使用第三方的库(一般以jar包的形式出现)。在脚本中,可以通过下面的方式添加依赖:
1 | apply plugin: 'java' |
按照上面生成jar文件,如果直接运行,会出现找不到依赖的问题。
为了解决这个问题,可以在脚本中添加一段代码,生成胖jar文件。这样的jar文件可以直接运行。
1 | apply plugin: 'java' |
1 | apply plugin: 'application' |
运行gradle tasks
,可以看到很多的task。其中有两个常用的新task:
1 | gradle run |
可以直接运行程序,看到输出结果。
1 | gradle installDist |
可以生成可运行的文件(实际上是响应的脚本,指定了依赖库和运行的jar文文件),其中相关的依赖库也都被拷贝到对应的libs(build\install\testLog\libs
)下面。可以通过下面的命令直接运行程序:
1 | build/install/testLog/bin/testLog |