本地git服务器的搭建和git命令的使用
git搭建
git忽略文件
gitolite代码管控与团队协作
git整理源代码
Gitolite版本库管理
***************************修改git提交者的信息***********************
提交代码的log里面会显示提交者的信息
git config --global user.name [username]
git config --global user.email [email]
在git命令中开启颜色显示
git config --global color.ui true
0、新建git本地仓库,把下载下来的源码添加到本地仓库
在项目目录创建新的本地仓库,并把项目里的所有文件全部添加、提交到本地仓库中去:
1、删除原来的git库
$ find . -type d -name ".git"|xargs rm -rf
$ find . -type f -name ".gitignore"|xargs rm -rf
$ find . -type f -name ".gitattributes"|xargs rm -rf
2、初始化git库
$ git init #在当前的目录下创建一个新的空的本地仓库 Initialized empty Git repository in /home/user/test_proj/.git/
3、添加所有源码到git库 $ git add . #把当前目录下的所有文件全部添加到暂存区
4、创建提交 $ git commit -m "project init" #创建提交 [master (root-commit) b36a785] project init 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 readme.txt
********************************************************************
在Linux下某一个文件夹下,如何查找包含某一个字符串的文件
# find -type f -name "*.c" | xargs grep ""
是你要找的文件夹;如果是当前文件夹可以省略-type f 说明,
只找文件-name "*.c" 表示只找C语言写的代码,从而避免去查binary;
也可以不写,表示找所有文件是你要找的某个字符串
********************************************************************
一、如何取消已经被git跟踪的文件
某工程project用Git管理代码,但是在他的根目录下有个配置文件,比如project.iws是不需要git每次跟踪它的修改记录的。
一般做法是在.gitignore文件中添加一行
project.iws
但是这个文件如果之前已经被git跟踪了,这样修改是没有用的。每次修改完以后,用git status还是能看到提示它被修改了。
解决办法就是在git中删除这个文件的跟踪记录,用这个命令
git rm --cached project.iws //这个命令不行
这样就从git的跟踪记录中删除了这个文件的跟踪记录。配合之前在.gitignore加的那行配置,以后你修改 project.iws 这个文件,git就不会有提示了。
================================================
如果某些文件已经被跟踪了, 再放入到.gitinore可能会失效, 用以下命令来忽略
git update-index --assume-unchanged filename
撤销用:
git update-index --no-assume-unchanged filename
二、git patch 失败后如何处理
git am patch失败时的一种处理方法
应用patch时,最好不要使用master分支,用其他同步的分支处理后再merge到master中,确保安全。
1.$ git am 0001-XXX.patch
(错误信息如下)
...
When you have resolved this problem run "git am --resolved".
If you would prefer to skip this patch, instead run "git am --skip".
To restore the original branch and stop patching run "git am --abort".
2.$ git apply --reject 0001-XXX.patch
先合并没有产生冲突的文件,根据同目录下的*.rej文件找出冲突地方
3.$ git add ***
把本次patch改动的文件添加进入缓存
4.$ git am --resolved
接受修改,出现问题时使用reset恢复
三、git commit --amend 修改已经提交的注释
只能修改最近的一次提交
1、git commit --amend
2、直接修改注释:图中绿色部分
3、如下图,组合键ctrl + x离开,在弹出的界面输入Y,回车保存。
四、git commit 节点的合并
用rebase -i
比如下图的commit 历史,想要把 "Second change" 和 "Third change" 这两个commit合并到一起
那么可以git rebase -i 7a734e9d47895e096313003d6a2e4f697a16e2e3
注意 7a734e9d47895e096313003d6a2e4f697a16e2e3 是 "Second change" 的前一个commit ID。
然后会出现编辑器 (具体什么编辑器看你的配置,在linux下,默认是 vi)列出从 7a734e 后面的所有commit,如下图
因为我们要把 "Second change" 和 "Third change" 合并到一起,所以只需要把 "Third change"前面的那个 pick 改成 squash即可,意思是将 "Third change" 和 它前一个commit (即 "Second change") 合并
修改后应该是这样
然后保存退出编辑器,git 就会执行rebase操作,当他遇到 "Second" 和 "Third" 的时候,会再次启动编辑器告诉你即将合并,让你提供commit message,如下图
默认的包括了两个commit的原始消息,你可以在这里任意修改commit message,(注意上图,如果需要将2个默认的commit 提交信息(second change 和third change)改成新的提交信息,需要删除原来的,然后写入自己想要的信息即可)比如改成 “Second and Third changes in single commit",然后保存退出,git就会把这两个commit变成一个新的commit。做完后我们再用git log看一下,就会变成下图
对比原始git log信息,你就可以发现两个commit被合成一个了。
同理,你可以将任意多个commit合并成一个 (第一个commit保持 pick, 后续commit改成 squash即可)
五、It looks like git-am is in progress. Cannot rebase.
git rebase / git pull 的时候出现这样的错误。
It looks like git-am is in progress. Cannot rebase.
用如下方法解决:rm -rf .git/rebase-apply
这句话最好在工程的根目录执行。