git

git

Part II

Posted by Dingding on October 3, 2017

git-tag shell

#!/bin/bash

branch="test"
if `git status | grep "RELEASE" &>/dev/null`; then
   branch="pro"
fi

user=$(echo $(git config user.name))
date=$(echo $(date +'%Y%m%d'))

prefix=$(echo ${branch}-${user}-${date})

count=$(echo $(git tag -l "${prefix}-*" | wc -l | xargs printf '%02d'))

function me-tag() {
    git push
    git pull --tags
    local new_tag=$(echo ${prefix}-${count})
    echo ${new_tag}
    git tag ${new_tag}
    git push origin $new_tag
}

me-tag;

更新所有仓库

find ./ -type d -name '\.git' -mindepth 1 -maxdepth 3  \
-exec sh -c   \
'
pathgit=$0/$1;
pathrepo=$(dirname $pathgit);
echo "尝试更新仓库:"{$pathrepo};
git --git-dir=$pathgit --work-tree=$pathrepo checkout . 
git --git-dir=$pathgit --work-tree=$pathrepo pull -r
' \
$PWD {} \;

统计某分支的所有历史记录

git reflog –date=local | grep ‘branchname’

合并分支

git merge –no-ff:不使用fast-forward方式合并,保留分支的commit历史 git merge –squash:使用squash方式合并,把多次分支commit历史压缩为一次

Https记住密码

永久记住密码: git config –global credential.helper store 会在用户主目录的.gitconfig文件中生成下面的配置。

[credential]
	helper = store

忽略

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

  • 此为注释 – 将被 Git 忽略

  • *.sample    # 忽略所有 .sample 结尾的文件
  • !lib.sample    # 但 lib.sample 除外
  • /TODO    # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
  • build/    # 忽略 build/ 目录下的所有文件
  • doc/*.txt   # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt

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

把某些目录或文件加入忽略规则,按照上述方法定义后发现并未生效,原因是.gitignore只能忽略那些原来没有被追踪的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。那么解决方法就是先把本地缓存删除(改变成未被追踪状态),然后再提交:

github

  • 拉取某个Pull Request, 并切换 git fetch gctt pull/1409/head git checkout FETCH_HEAD
git rm -r --cached .
git add .
git commit -m 'update .gitignore'