Git这个工具也使用了很长一段时间了。对于一些简单的使用也有了一些了解,之前都是记在OneNote上面的,往博客搬,顺便整理一下。
.gitignore和.gitattributes用法
可以直接看官方说明
- The Ignoring Files chapter of the Pro Git book.
- gitattributes Template
.gitignore
.gitigonre
用来标志你想要忽略的文件或者目录 - /mtk/ 过滤整个文件夹(注意最后面的’/‘表示文件夹)
- *.zip 过滤所有.zip文件
- /mtk/do.c 过滤某个具体文件
- **/1.txt 过滤所有子目录下的 1.txt 文件
模拟一个场景,假如我们只需要管理/mtk/目录中的one.txt文件,这个目录中的其他文件都不需要管理,那么我们就需要使用:
1 | /mtk/* |
注:在测试的时候写成
/mtk/
的话并不会把/mtk/one.txt
加入到版本管理中
示例说明如下:
1 | a)规则:fd1/* |
如何你想找一个好用的.gitignore文件可以看下这个https://github.com/github/gitignore
.gitattributes
.gitattributes
则是GitHub会在你的项目上传后自动分析它是由何种语言编写,然后给出一个统计结果,如 C 40%, Java 55%, XML 5%.有时候我们希望进行干预,创建 .gitattributes 文件,加入
1 | *.c linguist-language=C++ |
这样所有 .c 文件都会被识别为 C++。此外,还可以用 Git 属性让其知道哪些是二进制文件(以防 Git 没有识别出来),以及指示怎样处理这些文件。
还有其他的用法这里暂不说明了。(其实我也不会了hh)
重建.gitignore的方法
有时候需要重建.gitignore,可以使用如下的方法
1 | git rm -r --cached . #清除缓存 |
在一般情况只需要修改,然后使用git status
就可以看到变化了
常用指令
1 | ~ 初始化创建仓库 |
有关 rebase 的用法可以看【Git】rebase 用法小结
git tag
- 命令
git tag
可以显示所有的标签 - 命令
git tag <tagname>
用于新建一个标签,默认为HEAD
,也可以指定一个commit id
- 命令
git tag -a <tagname> -m "message"
可以指定标签信息 - 命令
git push origin <tagname>
可以推送一个本地标签 - 命令
git push origin --tags
可以推送全部未推送过的本地标签 - 命令
git tag -d <tagname>
可以删除一个本地标签 - 命令
git push origin :refs/tags/<tagname>
可以删除一个远程标签 - 命令
git checkout <tagname>
可以切换到对应标签的提交点,需要注意的是,在checkout 切换到标签位置
之后进行的提交不属于任何分支,因为此时已经分离了head
指针,一般的做法是 创建一个新的分支,然后再 commit 进行后续的操作
git warning:LF will be replaced by CRLF解决方法
对于当前项目中的config进行修改,直接在项目目录执行即可$ git config core.autocrlf false
也可以加上--global
参数在全局中修改git config --global core.autocrlf false
其实上是修改的.gitconfig文件,对项目的修改是project/.git/config
,全局则是修改~/.gitconfig
修改之后的情况如下,这里以我的~/.gitconfig
文件为例
1 | # This is Git's per-user configuration file. |
最好的习惯是所有的文本文件都是用LF(ASCII码中的’\n’)结尾
不要是用Windows自带的记事本进行打开,浏览时换行不会正常(因为Windows识别CRLF为换行)
如果需要查看已经配置过的设置,可以使用
git config --list
查看
Git 文件名大小写无法修改的问题
在本地修改了文件名或者目录的大小写,但是每次 push 发现在 GitHub 上面都没有上传成功,并未完成修改,解决方法如下:
- 使用 git 执行命令,将该项目下的 git 识别大小写关闭
1
2
3
4
5$ git config core.ignorecase false
各个选项和意思如下
false -- do not use workarounds for non-case-sensitive filesystems (current) (default)
off no -- do not use workarounds for non-case-sensitive filesystems
true yes on -- use workarounds for non-case-sensitive filesystems - 在设置了忽略大小写之后,使用
$ git status
就可以看到大小写有关文件的修改
这时候需要删除远程仓库中不需要的文件夹和文件1
2
3
4
5
6# 删除 Test 文件夹中的记录
$ git rm --cached Test -r
# 然后推送到远端
$ git add -A
$ git commit -m "rm files"
$ git push origin master举个例子,你仓库中有文件夹 test
.
└── test
└── 1
上传一次 commit
然后$ mv test Test
.
└── Test
└── 1
$ git status
On branch master
Your branch is up to date with ‘origin/master’.
显示并没有改动,原因是没有区分大小写
$ git config core.ignorecase false
$ git status
Untracked files:
(use “git add…” to include in what will be committed)
Test/
然后 commit,会发现 GitHub 上有test
和Test
两个文件夹,本地只有Test
于是删除test
的缓存,推送到远端
$ git rm –cached test -r
$ git add -A
$ git commit -m “rm files”
$git push origin master
修改git remote url
重新修改git的remote url
法一
$ git remote set-url origin git@github.com:test/thinkphp.git
法二
$ git config -e
直接编辑其中origin的url就行了,退出时记得保存
1 | [core] |
修改commit版本中的注释
修改已经commit版本里面的注释
1 | # 如果你的注释写错了 |
删除本地和远程的分支
1 | # 删除远程的分支 |
开发测试环境
在实际写代码的过程中一般至少有两个环境,测试和线上环境,如何来使用git维护我们的开发进程,并且在测试develop环境和线上online环境中都可以比较好的进行管理,这里使用分支的合并。
首先创建好的工程然后初始化git,在这个分支上进行代码的编写,然后提交一个版本
1 | # 创建仓库,并且修改内容 |
然后开始创建develop分支和online分支
1 | # 创建develop分支并且切换过去 |
然后在online分支中修改自己的配置文件(连接线上的数据库)
保持测试数据库和线上的数据结构的一致性,在develop分支进行开发
1 | # 在online分支上修改配置文件并且commit |
这样就完成了远程的online分支的更新,然后在服务器上部署online分支的代码
在远端仓库更新了之后进行git pull更新即可。(当然也可以使用web hook进行自动的部署更新)
配置文件在项目中显示了账户密码
把自己的项目扔到了github上面,但是在配置文件中有账号密码等信息,这样不就暴露了吗。
解决方法:在第一次的时候将空的配置文件上传,然后在.gitignore文件中添加对应的文件进行忽略。
比如在WordPress中,下载下来的代码里面根目录下是wp-config-sample.php
文件,需要手动复制重命名为wp-config.php
,做法也是在.gitignore中忽略该文件,给一个sample文件来避免私密信息的泄露。
如何使用 HTTP 代理
在进行 clone 的时候经常会遇到速度特别慢的情况,一般比较好的方法是用梯子进行代理
有两种使用代理的方法,使用 git 的代理设置
和 使用系统的代理设置
,这里假设代理使用 1080
端口进行 HTTP 代理,使用 1087
端口进行 socks5 代理,那么设置方法如下:
使用 git 的代理设置
,在设置了代理之后可以在 ~/.gitconfig
文件中看到对应的设置
1 | http代理: |
使用系统的代理设置
,如果不写到 ~/.bashrc
或者 ~/.zshrc
之类的配置文件不能永久生效,但是这样用起来也挺方便的,oh-my-zsh
可以很方便找历史
1 | http代理 |