标签归档:git

删除git中的大文件历史

列出所有仓库中的对象(包括SHA值、大小、路径等),并按照大小降序排列,列出TOP 10:

git rev-list --all | xargs -rL1 git ls-tree -r --long | sort -uk3 | sort -rnk4 | head -10

根据最大文件的路径,修改此文件的commit历史:

git filter-branch -f --tree-filter "rm -f <filepath>" -- --all

强制提交到远程分支:

git push -f

sublime-merge 中文化的方法

菜单中选择 Preferences > Browse Packages… ,在弹出的文件夹中,克隆 git 仓库:

git clone https://github.com/sublime-china/sublime-merge-chinese.git Default

重启软件即可。

svn 迁移到 git

用户迁移配置 userinfo.txt

svn_user = git_user <git_user_email>
svn_user2 = git_user2 <git_user_email2>

迁移项目

git svn clone <https://server/svn/xx> --username <user> [--password <password>] --prefix=svn/ --no-metadata --authors-file=<userinfo.txt> --stdlayout

如果出现 Author: VisualSVN Server not defined in userinfo.txt file ,应当在 userinfo.txt 中添加缺失的用户。

如果出现 Can't locate Term/ReadKey.pm in @INC ,执行以下命令(以 manjaro 系统为例):

yay -S perl-term-readkey

git stash 贮藏

# 贮藏
git stash
# 贮藏时添加 message
git stash save "message"
# 贮藏时包含所有修改,同 --all
git stash -a
# 贮藏时包含未暂存的修改,同 --include-untracked
git stash -u
# 出栈第一个贮藏,应用到工作目录
git stash pop
# 应用贮藏内容到工作目录
git stash apply
# 贮藏堆栈列表
git stash list
# 丢弃贮藏 stash@{0}
git stash drop stash@{0}
# 清空 stash
git stash clear
# 查看贮藏的 diff
git stash show [stash@{0}]
# 查看贮藏的全部 diff,同 --patch
git stash show -p
# 从贮藏创建新分支
git stash branch new_branch_name

git 拉取所有分支的办法

git clone xxx
git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git fetch --all
git pull --all

nginx 代理 gitlab 时的 413 问题

git push 时出现:

Counting objects: 80, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (75/75), done.
fatal: The remote end hung up unexpectedly
Writing objects: 100% (80/80), 42.70 MiB | 12.01 MiB/s, done.
Total 80 (delta 47), reused 0 (delta 0)
error: RPC failed; HTTP 413 curl 22 The requested URL returned error: 413 Request Entity Too Large
fatal: The remote end hung up unexpectedly
Everything up-to-date

可以先尝试

git config --global http.postBuffer 524288000

同时检查 nginx 配置,在 nginx.confhttp 中添加:

client_max_body_size 100m;

100m 值取决于报错的大小。

利用 git 统计代码贡献

git log --format='%aN' | sort -u | while read name; do echo -en "$name\t"; git log --author="$name" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -; done