目录
ubuntu下出现git log 外文正常显示、中文显示乱码的问题
描述:
中文显示位尖括号 <E4><B8><B4><E6><97><B6><E4><BF><9D><E5><AD><98>
解决:
1
2
3
| git config --global i18n.commitencoding utf-8
git config --global i18n.logoutputencoding gbk
export LESSCHARSET=utf-8
|
SHELL
git status时也会出现类似问题,但导致原因却不相同,可使用下面命令解决
1
| git config --global core.quotepath false
|
SHELL
跨系统基于挂载文件开发时常出现提交后,在另一系统上仍然存在多个未提交
描述:
在多个系统间本地开发时,使用挂载目录进行编码、提交分离时,常常出现在一端提交,而另一端vs code提示多个未添加的变更,这常常是不同系统间filemode差异
解决:
1
| git config --add core.filemode false
|
SHELL
修改submodule
修改 .gitmodules 文件中对应模块的 url 属性;
使用 git submodule sync 命令,将新的 URL 更新到文件. git/config;
再使用命令初始化子模块:git submodule init
最后使用命令更新子模块:git submodule update
参考:
Git 修改. Submodule 文件 url 生效
gitea action拉取submodule非本用户或本群组仓库时出错
参考
gitea action checkout的密钥配置
需要配置好action的密钥对,依次在submodule里配置公钥,并在action所在仓库配置私钥传递到action,在action里正确配置密钥后即可正常拉取
git 为不同分支设置不同的upstream
one repo with multi upstream
为不同分支配置不同的远程仓库
逻辑视图
实现过程
1. 新建仓库
基于已有仓库,直接跳 2
1
2
3
4
5
| # 新建仓库
$: mkdir myrepo; cd myrepo
# 初始化仓库
$: git init
|
SHELL
2. 添加远程仓库源
1
2
3
| # github 和 mydomain 是所添加源的别称,称其为<source name>
$: git remote add github https://github.com/foo/bar.git
$: git remote add mydomain https://git.mydomain.com/foo/bar.git
|
SHELL
显示远程仓库:
1
2
3
4
5
6
7
8
9
10
11
| # 显示所有远程仓库
$: git remote -v
# 显示某个远程仓库的信息
$: git remote show <source name>
# 删除远程仓库
$: git remote rm <source name>
# 修改远程仓库别名
$: git remote rename <old name> <new name>
|
SHELL
3. 创建空白分支
1
2
| # 创建空白分支dev
$: git checkout --orphan public
|
SHELL
如果是基于已有的分支创建,需要清空
1
2
| # 注意最后有一个句点
$: git rm -rf .
|
SHELL
4. 拉取分支,将本地分支与远程分支关联
在创建的空白分支下,拉取远程仓库指定分支的代码。
1
2
3
4
5
6
7
8
| # github源别名,master是要引用的github远程分支名
$: git pull github master
# 关联远程分支
$: git branch --set-upstream-to=github/master public
# 或者
$: git branch -u github/master public
|
SHELL
至此,我们已经创建了一个本地分支,并将其与远程分支关联。
同样的,创建其它分支只需要重复步骤 3、4。
例如创建 private 分支,并将其与远程仓库 mydomain 的 private 分支关联,步骤如下:
1
2
3
| $: git checkout --orphan private
$: git pull mydomain private
$: git branch -u github/private private
|
SHELL
5. 推送本地分支
因为本地分支已经关联了远程分支,所以推送时只需要 git push 即可。
如果没有关联远程分支则需要:
1
| $: git push <source name> <branch name>
|
SHELL