存档在 ‘git’ 分类

git提交空目录

2014年5月21日

git仅仅跟踪文件的变动,而不跟踪目录,导致一些必要的空目录不能加入到暂存区,最后不能提交到仓库。

解决的办法一般是在空目录总增加一个文件,有一种约定俗成的方法就是增加.gitignore文件,这个文件作为过滤器,可以存在工作目录的每个目录下。
可以通过以下脚本来检测空目录并自动生成一个.gitignore文件。

find . \( -type d -empty \) -and \( -not -regex ./\.git.* \) -exec touch {}/.gitignore \;

另外在手动创建.gitignore文件时,提示“必须键入文件名”,这是windows操作系统把.gitignore作为文件格式,误认为没有文件名,可以通过以下两种方式解决:
1.文件命名为”.gitignore.”
2.直接touch .gitignore

解决 github 样式资源域名被墙方法

2014年3月31日

最近上github慢的要死,等了半天后老是css没加载,严重影响使用,解决办法是修改hosts,指明IP地址

  1. Windows下的修改方法
    修改C:\Windows\System32\drivers\etc\hosts,增加如下两行

    185.31.17.184 github.global.ssl.fastly.net
    185.31.16.184 github-camo.global.ssl.fastly.net

    如果权限不够,在hosts文件上右键属性->安全,为登录用户授予修改权限。

  2. Linux下修改方法
    修改/etc/hosts,添加如1中的两行。 

git乱码相关问题解决

2014年3月29日

1.解决bash控制台ls命令中文文件名乱码

在git\etc\git-completion.bash文件中增加一行

alias ls='ls --show-control-chars --color=auto'

2.bash控制台git commit提交无法输入中文注释

修改git\etc\inputrc

set output-meta on
set convert-meta off

3.git log 命令中文注释乱码

修改git/etc/profile中增加一行

export LESSCHARSET=iso8859

4.解决gitk显示中文注释乱码

git config --global i18n.commitencoding ISO-8859
git config --global i18n.logoutputencoding ISO-8859

.gitignore 文件

2014年3月28日

.gitignore 配置文件用于配置不需要加入版本管理的文件,配置好该文件可以为我们的版本管理带来很大的便利,以下是个人对于配置 .gitignore 的一些心得。

1、配置语法:

  以斜杠“/”开头表示目录;
  以星号“*”通配多个字符;
  以问号“?”通配单个字符
  以方括号“[]”包含单个字符的匹配列表;
  以叹号“!”表示跟踪匹配到的文件或目录;

  此外,git 对于 .ignore 配置文件是按行从上到下进行规则匹配的,意味着如果前面的规则匹配的范围更大,则后面的规则将不会生效;

2、示例:

  (1)规则:fd1/*
     说明:忽略目录 fd1 下的全部内容;注意,不管是根目录下的 /fd1/ 目录,还是某个子目录 /child/fd1/ 目录,都会被忽略;
  (2)规则:/fd1/*
     说明:忽略根目录下的 /fd1/ 目录的全部内容;
  (3)规则:

/*
!.gitignore
!/fw/bin/
!/fw/sf/
说明:忽略全部内容,但是不忽略 .gitignore 文件、根目录下的 /fw/bin/ 和 /fw/sf/ 目录;

Git中常见变量

2014年1月20日

HEAD: 表示最近一次的 commit。
MERGE_HEAD: 如果是 merge 产生的 commit,那么它表示除 HEAD 之外的另一个父母分支。
FETCH_HEAD: 使用 git-fetch 获得的 object 和 ref 的信息都存储在这里,这些信息是为日后 git-merge 准备的。
ORIG_HEAD:保存父节点的SHA-1值
HEAD^: 表示 HEAD 父母的信息
HEAD^^: 表示 HEAD 父母的父母的信息
HEAD~4: 表示 HEAD 上溯四代的信息
HEAD^1: 表示 HEAD 的第一个父母的信息
HEAD^2: 表示 HEAD 的第二个父母的信息
COMMIT_EDITMSG: 最后一次 commit 时的提交信息。

git diff

2014年1月10日

1.staging area(暂存区)和working area(工作区)的文件 (无其他参数时)

git diff

2.master分支和working area的文件 (用master参数)

git diff master

3.HEAD指向的内容和working area的文件

git diff HEAD

4.用远程master分支比较当前工作区

git diff refs/remotes/origin/master

5.经常还要用到master分支的某个文件的历史版本和working area的该文件的比较

git diff 0c5ee16a6a4c849d0ae0448caa8ff174399c7c3c ./socket_helper.cpp  

上面的命令中, diff后面的参数指的是commit id, ./socket_helper.cpp是要比较的文件路径。
diff的命令输出格式注意:

---代表源文件  
+++代表目标文件  

通常working area的文件都是被当作目标文件来看待。
-开头的行,是只出现在源文件中的行
+开头的行,是只出现在目标文件中的行
空格开头的行,是源文件和目标文件中都出现的行
差异按照差异小结进行组织,每个差异小结的第一行都是定位语句,由@@开头,@@结尾。

git diff 0c5ee16a6a4c849d0ae0448caa8ff174399c7c3c ./socket_helper.cpp
diff --git a/data_service/src/socket_helper.cpp b/data_service/src/socket_helper.cpp
index d606452..047e213 100755
--- a/data_service/src/socket_helper.cpp
+++ b/data_service/src/socket_helper.cpp
@@ -4,6 +4,7 @@
 #include "data/login_response.h"
 #include "data/heartbeat_response.h"
 #include "helper/parser.h"
+#include "helper/time_measure.h"
 #include <booster/log.h>
 #include "exception/socket_error.h"
 #include "exception/data_error.h"

上面的diff结果表明

1.某个提交记录0c5ee代表的socket_helper.cpp文件是源文件,当前working area的socket_helper文件是目标文件。

2.在源文件第4行开始的6行和目标文件第4行开始的7行构成一个差异小结

3.这个差异小结中,目标文件添加了一行#include “helper/time_measure.h”

4.其他空格开头的行表明没有差异。

git push 与 git reset小结

2013年11月13日
$ git push 远程repo地址 master
 // 把本地仓库提交到远程仓库的master分支中
$ git remote add origin 远程repo地址
$ git push origin master

这两个操作是等价的,第二个操作的第一行的意思是添加一个标记,让origin指向远程的repo,也就是说你操 作origin的时候,实际上就是在操作远程repo。origin在这里完全可以理解为后者 的别名。

注意:需要说明的是,默认情况下这条语句等价于提交本地的master仓库到远程仓库,并作为远程的master分支。
如果想把本地的某个分支test提交到远程仓库,并作为远程仓库的master分支,或者作为另外一个名叫test的分支,那么可以这么做。

$ git push origin test:master
// 提交本地test分支作为远程的master分支
$ git push origin test:test
// 提交本地test分支作为远程的test分支

如果想删除远程的分支呢?类似于上面,如果:左边的分支为空,那么将删除:右边的远程的分支。

$ git push origin :test
// 刚提交到远程的test将被删除,但是本地还会保存的,不用担心。

git 删除错误提交的commit方法:
根据–soft –mixed –hard,会对working tree和index和HEAD进行重置:
git reset –mixed:此为默认方式,不带任何参数的git reset,即时这种方式,它回退到某个版本,只保留源码,回退commit和index信息
git reset –soft:回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可
git reset –hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容,此命令 慎用!

HEAD 最近一个提交
HEAD^ 上一次提交
HEAD^ ^ 上一次的 上一次的提交(倒数第三次)
HEAD^^^ 倒数 第四次的 提交
———————-
HEAD~0 最近一个提交
HEAD~1 上一次提交
HEAD^2 上一次的 上一次的提交(倒数第三次)
HEAD^3 倒数 第四次的 提交
———————-
每次commit的SHA1值. 可以用git log 看到,也可以在页面上commit标签页里找到.

github使用最常见用法

2013年11月4日

以前没使用过像github这种项目版本与管理仓库,打算以后一些个人写的小项目可以放在上面,所以最近研究研究了下,有那么一点明白了,下面说说一些简单的操作。

略过一些配置…..

一 新建项目提交到github

  1. 在github上面新建repo,假设名为Test
  2. 在项目启动编码后,生成本地仓库(假设项目所在工作目录为work)
git init #创建空的本地仓库

 

git add .
git add myFile
#添加文件到暂存区

 

git commit -m &quot;XXXXX&quot;
#提交暂存区中的修改到本地仓库,XXXXX为你针对这次修改的描述

至此本地的项目文件已经提交到了本地仓库,接下来就是将本地仓库推送到githhub服务器上的仓库。

git remote add origin git@github.com:throwVoid/Test.git
#将throwVoid替换成你自己的github用户,其中的origin也可以取你自己喜欢的名字,这里相当于后面与git@github.com:throwVoid/Test.git建立链接后使用的别名

 

git push origin master
#将本地仓库推送到origin的master分支

至此,你可以在github上看见刚才提交的更改了。 » 阅读更多: github使用最常见用法