git的一些指令

切换submodule的仓库

修改.gitmodules后执行

1
2
3
git submodule sync
git submodule init
git submodule update

submodule在init时的HEAD是独立于对应的仓库的(它只是一个指向对应commit的指针),要让submodule的修改引用于其对应的仓库,见:
https://stackoverflow.com/questions/9189575/git-submodule-tracking-latest
https://stackoverflow.com/questions/5828324/update-git-submodule-to-latest-commit-on-origin
https://stackoverflow.com/a/19872486

总结:

1
git submodule update --remote --merge

可以确保拉取的是仓库中的最新版,然后自己手工或脚本在update后checkout每个submodule到master分支

重定向HEAD到master(<path>记得修改成自己的仓库路径)

1
2
repoPath=$(git rev-parse --show-toplevel)
git submodule foreach --recursive 'branchName=$(git config -f $repoPath/.gitmodules submodule.$name.branch);git checkout $branchName'

从仓库移除submodule

1
2
git submodule deinit <submodule name>
git rm --cached <submodule name>

迁移git仓库

1
2
git clone --bare [url from]
git push --mirror [url to]

删除本地分支

1
git branch -d [branchname]

使用其他ssh

环境变量GIT_SSH可以指定使用的ssh连接命令,因此可以通过这个来改变使用的公钥

1
git config core.sshCommand "ssh -i ~/.ssh/id_rsa_example -F /dev/null"

https://www.cnblogs.com/chenkeyu/p/10440798.html

路径相关

1
2
3
4
# 获取当前所在仓库根目录在本机上的绝对路径
git rev-parse --show-toplevel
# 获取仓库内文件相对于仓库根目录下的路径
git ls-files
文章目录
  1. 1. 切换submodule的仓库
  2. 2. 从仓库移除submodule
  3. 3. 迁移git仓库
  4. 4. 删除本地分支
  5. 5. 使用其他ssh
  6. 6. 路径相关
|