Git 笔记

                     

贡献者: addis

预备知识 GitHub Desktop 的简单使用

   一个简单美观的 GUI 客户端是 GitHub Desktop(未必需要使用 github.com),然而许多 GUI 的功能比起命令行来还是要少得多,例如 GitHub Desktop 不支持 stage,不支持把仓库或指定文件恢复到以前某个版本等。要安装 Git 命令行程序,Windows 用户可以下载 Git for Windows,Debian 或 Ubuntu 可以直接用 sudo apt install git 安装。Git for Windows 的 Git Bash 相当于 linux 的命令行,linux 常用的命令很多都有.

   Git for Windows 的 Git bash 是不支持 symlink 的,symlink clone 下来以后都会变成文本文件(文本就是 symlink 指向的路径),所以还是建议在 WSL 中安装 Git 使用。但就算使用 wsl,checkout 出的 symlink 也可能只是一个文本文件,内容是目标的路径。此时可以手动使用 ln -sf $(cat 文件) 文件 去修复,也可以写一个脚本(见文末)。

   但新的问题是,WSL 用 git 会有讨厌的权限问题。所以 git bash 和 WSL 可以结合起来用。

   如果 repo 非常大(几 G 到几百 G),可以考虑用 Scalar

1. 新安装设置

2. 基础

把几次 commit 合并

3. 用 Git 备份大型文件夹

修复 packfile

4. 分支

5. tag 和 release

6. symlink 修复脚本

   在支持 symlink 的系统中(包括 NTFS 文件系统使用 WSL1;exFat 不支持)若 symlink 出现问题,可以用以下 bash 代码修复 repo 中的 symlink。该代码从 git 数据库中获取所有 symlink,如果检查到对应的文件实际上是一个文本,那就手动创建 symlink。

代码 1:fix_git_symlink.sh
# must be called at the same directory of `.git` folder
# loop through all symlinks in repo
for file in \
	$(git ls-files -s | egrep '^120000' | awk '$NF != "" {print $NF}');
do
	if [[ ! -L "$file" ]]; then
		# current file is not a symlink and not empty
		printf "[fixing] $file -> $(cat $file)\n"
		if [[ -s "$file" ]]; then
			# file is not empty
			ln -sf "$(cat $file)" "$file"
			if [[ ! -e "$file" ]]; then # dest exist
				echo "warning: destination doesn't exist."
			fi
		else
			echo "file is empty!"
		fi
	fi
done

                     

© 小时科技 保留一切权利