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. tag 和 release

5. 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

6. 分支

7. merge

8. rebase


致读者: 小时百科一直以来坚持所有内容免费无广告,这导致我们处于严重的亏损状态。 长此以往很可能会最终导致我们不得不选择大量广告以及内容付费等。 因此,我们请求广大读者热心打赏 ,使网站得以健康发展。 如果看到这条信息的每位读者能慷慨打赏 20 元,我们一周就能脱离亏损, 并在接下来的一年里向所有读者继续免费提供优质内容。 但遗憾的是只有不到 1% 的读者愿意捐款, 他们的付出帮助了 99% 的读者免费获取知识, 我们在此表示感谢。

                     

友情链接: 超理论坛 | ©小时科技 保留一切权利