在一个仓库中引用另一个仓库
参考资料:http://www.jianshu.com/p/491609b1c426
$ git config --global user.email "[email protected]"
$ git config --global user.name "wilker"
# 测试连接 成功 地址: 192.168.1.159:22
$ ssh -T -p 22 git@192.168.1.159
Hi there, You've successfully authenticated, but Gogs does not provide shell access. # 连接 成功
If this is unexpected, please log in with password and setup Gogs under another user.
# 测试连接 失败 地址: 192.168.1.177:20022
$ ssh -T -p 20022 git@192.168.1.177
ssh: connect to host 192.168.1.177 port 20022: Connection refused # 连接 失败
参考总结: other-TortoiseGit设置ssr代理.md
一般不同项目的模板不同, 所以使用 局部模板
项目内新建一个模板文件, 如 %PROJECT%\rummy_template.txt
, 内容如下
是否修改引擎: 否
问题:
描述:
cd 到 项目根目录 下设置
> cd I:\workspace\ShadowsocksR
I:\workspace\ShadowsocksR (master -> origin)
> git config commit.template ./rummy_template.txt # 设置模板
其实就是修改 %PROJECT%\.git\config
文件, 增加模板字段
[commit]
template = "./rummy_template.txt"
测试提交
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w5NjlwNY-1596350269633)(http://yxbl.itengshe.com/20190810040603-1.png)]
取消模板. 把模板文件置空设置即可.
SSH 程序可以从以下途径获取配置参数:
用户配置文件 (~/.ssh/config)
系统配置文件 (/etc/ssh/ssh_config)
配置文件可分为多个配置区段,每个配置区段使用"Host"来区分。我们可以在命令行中输入不同的Host来加载不同的配置段。
$ git config --global core.ignorecase false
参考: https://www.jianshu.com/p/420d38913578
git
执行下列命令:$ git config core.ignorecase false
解释:设置本地git
环境识别大小写
push
到远程仓库。Footer
,Header
,Menu
等给删掉。# 删除Header文件夹下的所有文件
$ git rm --cached src/components/Header -r
$ git rm --cached src/components/Footer -r
如果显示如下,说明操作成功:
rm 'src/components/Menu/Header.js'
rm 'src/components/Menu/Header.less'
...
b). 同步,提交到远程仓库
$ git add .
$ git commit -m'rm files'
$ git push origin master
这时,如果上面的步骤都顺利,那在远程仓库刷新一下,惊喜就出来了:
> git log --since ==2019-08-13 --until=2019-08-15 --pretty=format:"myflag:%h @ %an @ %ai @ %s" --author=yangxuan --no-merges --name-status
myflag:6415697 @ yangxuan @ 2019-08-15 20:54:48 +0800 @ 描述: 商城内测支持
M Assets/Code/lua/logic/patch/patch.lua
A Assets/Code/lua/logic/pay/pay_test.lua.meta
M Assets/Code/lua/logic/platform/platform_android.lua
M Assets/Code/lua/logic/ui/pnl_shop/chips_list_item/chips_list_item_logic.lua
myflag:c783dc0 @ yangxuan @ 2019-08-15 19:41:02 +0800 @ 描述: 打包工具 父目录
M Assets/Code/Editor/Package/PackAppPatch.cs
可以用于写工具判读某个时间内 某人 是否有提交过某些文件.
比如: 使用 python 执行这个命令后把输出导出到一个文件中, 然后读取文件解析后封装到数据结构中, 再进行逻辑分析.
–date-order 日期降序排序
–reverse 翻转排序
以 windows 为准,不然 不同平台下的使用 windows 上的仓库会出现 所有文件都有差异
$ git config --global core.autocrlf true
在当前仓库,邮件 TortoiseGit -> Submodule Add
path 中的目的 文件夹必须是不存在的,也就是 hexo-theme-nex 文件夹是不存在的,不然汇报 :xxx alread exists
的错
先 clone 出工程
root@df0ca32e848a$~# git clone git@git.oschina.net:yangxuan0261/my_hexo_blog.git
cd 进工程后再初始化 submodule
root@df0ca32e848a:~# cd my_hexo_blog
root@df0ca32e848a:~/my_hexo_blog$ git submodule update --init --recursive
在分别进入所有的子模块 checkout 到 master 分支
root@df0ca32e848a:~# cd themes/xxxx
root@df0ca32e848a:~/my_hexo_blog/themes/xxxx$ git checkout master
然后就在工作中update所有的子模块
root@df0ca32e848a:~/my_hexo_blog/themes/xxxx# cd ../..
root@df0ca32e848a:~/my_hexo_blog$ git submodule update --remote
正确姿势,递归 clone 所有 submodule
$ git clone --recursive -b master git@github.com:yangxuan0261/Testmmo-server.git a_mmo_skynet
命令
$ git checkout --
以 skynet 仓库为例
加个 -b 参数
$ git clone -b OpenSSL_1_0_2-stable git@github.com:openssl/openssl.git openssl_1.0.2
大概就可以猜测是被墙了…的话开全局代理也没有起作用
报错:
Failed to connect to chromium.googlesource.com port 443: Timed out
$ git config --global http.proxy "localhost:1080"
git.exe clone --progress -v "https://chromium.googlesource.com/external/googletest" "D:\a_tmp_test_dir\googletest"
Cloning into 'D:\a_tmp_test_dir\googletest'...
POST git-upload-pack (151 bytes)
remote: Total 4343 (delta 3260), reused 4343 (delta 3260)
Receiving objects: 100% (4343/4343), 1.41 MiB | 49.00 KiB/s, done.
Resolving deltas: 100% (3260/3260), done.
Success (33681 ms @ 2017/7/24 10:31:42)
https://segmentfault.com/q/1010000006978681
删除 HEAD 分支即可
git branch -D HEAD
url_name : 远端地址别名
url : 远端地址
remote_branch : 远端分支名
local_branch : 本地分支名
local_repo_name : 本地仓库名
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com
$ git init
$ git checkout -b [local_branch]
$ git add -A
$ git commit -am "init workplace"
$ git remote add [url_name] [url]
$ git push [url_name] [local_branch]:[remote_branch]
$ git clone -b [remote_branch] --recursive [url] [local_repo_name]
$ git pull [url_name] [remote_branch] --progress -v --no-rebase #远端remote_branch与本地当前分支合并
$ git pull [url_name] [remote_branch]:[local_branch] --progress -v --no-rebase #远端remote_branch与本地local_branch合并
$ git push [url_name] [remote_branch] #推送本地当前分支到远端remote_branch
$ git push [url_name] [local_branch]:[remote_branch] #推送本地local_branch到远端remote_branch
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add ..." to update what will be committed)
(use "git checkout -- ..." to discard changes in working directory)
modified: README.md # 修改
deleted: nohup.out # 删除
Untracked files:
(use "git add ..." to include in what will be committed)
aaa.txt # 增加
no changes added to commit (use "git add" and/or "git commit -a")
$ git checkout . # 有点像切分支
$ git commit -m 'aaa' refresh_blog_gen.sh
$ git remote add [url_name] [url]
$ git remote -v
origin git@gitlab.rd.175game.com:yx0588/q6_mywiki.git (fetch)
origin git@gitlab.rd.175game.com:yx0588/q6_mywiki.git (push)
$ git remote rm [url_name]
直接修改
$ git remote set-url origin [url]
先删后加
$ git remote rm origin
$ git remote add origin [url]
$ git checkout -b [new_branch] # 创建并切换到 new_branch
$ git push [url_name] [local_branch]:[remote_branch] #与推送一样,远端如果没有remote_branch分支会自动创建
$ git checkout [local_branch]
$ git remote update origin --prune
查看 所有的本地分支, * 在前面的表示是 当前所在分支
git branch
aaa
* master
查看 当前所在的分支
git rev-parse --abbrev-ref HEAD
master
git branch -r
git branch -a
git branch [local_branch] --set-upstream-to [url_name]/[remote_branch]
git branch -D [local_branch]
git remote prune [url_name] # 本地缓存的 指定远端无用的分支 都清除
git fetch -p # 本地缓存的 所有远端无用的分支 都清除
在Git v1.7.0 之后,可以使用这种语法删除远程分支:
git push origin -d [remote_branch]
tag 可作为 时间线 中的一个 标记, 方便看出那个时间点 前后发生了什么事情.
比如发了一个版本, 打个 tag, 看日志的时候就一目了然.
直接可视化记录
本地创建一个新 tag : rls-ccc
查看日志, 在 tag 上右键 -> push “rls-ccc”. 远端就有这个 tag 了. 相当于这个命令
git push --progress "origin" refs/tags/rls-ccc
git tag -d [tag_name]
git push origin -d tag [tag_name]
列出 tag 及 一行信息, tag 信息优先
$ git tag -ln
rls-app-v1-0.9.0.1 描述: 打包工具
rls-patch-v1-0.9.1.1 platId: -1
$ git tag -l rls-ap*
rls-app-v1-0.9.0.1
git show [tagName]
$ git show rls-patch-v1-0.9.1.1
tag rls-patch-v1-0.9.1.1
Tagger: www <321321@qq.com>
Date: Fri Mar 27 11:00:00 2020 +0800
platId: -1 # tag message
所有渠道
commit e232d5fdd4a6710ced07887140dfed27f7153e31 (tag: rls-patch-v1-0.9.1.1)
Author: aaa <123123@qq.com>
Date: Tue Mar 24 21:09:35 2020 +0800
git submodule update --init --recursive
git submodule update --recursive
~/test_repo/z_mywiki_hello # cat .gitmodules
[submodule "a_blog"]
path = a_blog
url = git@xxx.com:www/ccc.git
branch = master
$ git submodule add [url] [dir_path]
操作顺序
$ git submodule deinit -f [submodulename]
$ git rm -f [submodulename]
$ git rm -f --cached [submodulename]
# rm -rf ./git/modules/[submodulename] # 这一步是针对已经update之后的子模块删除的
submodulename 就是 .gitmodules 文件中的这个 3rd/aaa
[submodule "3rd/aaa"]
$ git log -2 # 查看最后两次提交
commit 0e8a7eb6def60e4988dad024d4a75e9ba0434dab (HEAD -> master, origin/master, origin/HEAD)
Author: yangxuan <364105996@qq.com>
Date: Mon Sep 30 00:09:20 2019 +0800
a
commit 5fae8260e5ec54e213fd43a46f46587f847e6291
Author: yangxuan <364105996@qq.com>
Date: Mon Sep 30 00:08:43 2019 +0800
'Robot-DESKTOP-B3461GK'
commit 字段的值就是版本的 sha1 值
也可以用 git reflog
命令
$ git reflog
0373047 (HEAD -> master, origin/master, origin/HEAD) HEAD@{0}: commit: Robot-wilker
0e8a7eb HEAD@{1}: pull --progress -v origin master:master: fast-forward
f2d943c HEAD@{2}: pull --progress -v origin master:master: fast-forward
a0c8186 HEAD@{3}: commit: Robot-wilker
72bf912 HEAD@{4}: commit: Robot-wilker
f62778e HEAD@{5}: commit: Robot-wilker
命令行
$ git reset --hard 0e8a7eb6def60e4988dad024d4a75e9ba0434dab // 需要回滚到的目的版本
HEAD is now at 0e8a7eb a
或者 gui 操作
右键某次提交 -> Reset -> 选择 Hard -> OK
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4PFZOTVI-1596350269643)(http://yxbl.itengshe.com/20200611233157-1.webp)]
先回滚本地到某一次提交
$ git reset --hard 0e8a7eb6def60e4988dad024d4a75e9ba0434dab // 需要回滚到的目的版本
HEAD is now at 0e8a7eb a
强制堆到远端
$ git push origin master -f // 强推到远端
Total 0 (delta 0), reused 0 (delta 0)
remote: Powered By Gitee.com
To gitee.com:yangxuan0261/z_mywiki.git
+ 0373047…0e8a7eb master -> master (forced update)
```
只是回退提交, 保留现有的改变, 这种操作之后一般会有很多 dfif 文件
首先说一下作用:Git 中的tag指向一次commit的id,通常用来给开发分支做一个标记,如标记一个版本号。
$ git tag -a [tagname] -m "note"
注解:git tag 是打标签的命令,-a 是添加标签,其后要跟新标签号,-m 及后面的字符串是对该标签的注释。
$ git push origin --tags
注解:就像git push origin master 把本地修改提交到远程仓库一样,-tags可以把本地的打的标签全部提交到远程仓库
$ git tag -d version
注解:-d 表示删除,后面跟要删除的tag名字
$ git push origin :refs/tags/version
注解:就像git push origin :branch_1 可以删除远程仓库的分支branch_1一样, 冒号前为空表示删除远程仓库的tag
$ git tag或者git tag -l
删除 untracked files
$ git clean -f
连 untracked 的目录也一起删掉
$ git clean -fd
连 gitignore 的untrack 文件/目录也一起删掉 (慎用,一般这个是用来删掉编译出来的 .o之类的文件用的)
$ git clean -xfd
在用上述 git clean 前,强烈建议加上 -n 参数来先看看会删掉哪些文件,防止重要文件被误删
有好几种中姿势, 参考: https://stackoverflow.com/questions/8796522/git-tag-list-display-commit-sha1-hashes
姿势一: 最好姿势, 也最详细, 有 sha1,tag, 等
$ git log --decorate --tags --no-walk --pretty=format:"myflag:%H @ %S @ %an @ %ai @ %s"
myflag:e232d5fdd4a6710ced07887140dfed27f7153e31 @ rls-patch-v1-0.9.1.1 @ aaa @ 2020-03-24 21:09:35 +0800 @ sfesdfsdf
myflag:c5505467f5910363806fbdefcae4a608efab0734 @ rls-app-v1-0.9.0.1 @ bbb @ 2020-03-06 16:23:51 +0800 @ werwerwer
简约版
$ git log --oneline --decorate --tags --no-walk
e232d5fdd (tag: rls-patch-v1-0.9.1.1) sfesdfsdf
c5505467f (tag: rls-app-v1-0.9.0.1) werwerwer
姿势二:
$ git show-ref --tags
c5505467f5910363806fbdefcae4a608efab0734 refs/tags/rls-app-v1-0.9.0.1
a33cdc78a9675198cf9378713c229aecd3168ee4 refs/tags/rls-patch-v1-0.9.1.1
参考: Syncing a fork - https://help.github.com/en/articles/syncing-a-fork
自己的解决方案, 用自建的 gogs/gitea/gitlab 服务, 直接镜像 原仓库, 定时同步即可.
SHA-1
值: bf6504bc8c6ddd34b67efe5d22d5eb745a166d33
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mUbizTmV-1596350269645)(http://yxbl.itengshe.com/20200531024800-1.webp)]
$ git config --global core.ignorecase false // 全局
$ git config core.ignorecase false // 项目级, 项目级 > 全局
git 中有三个参数于换行符有关:
eol
: 设置工作目录中文件的换行符,有三个值 lf, crlf 和 native(默认,同操作系统)
autocrlf
:
true
表示检出是转换CRLF, 提交时转换为 LFinput
表示检出是不转换,提交时转换为 LFfalse
表示不做转换safecrlf
:
true
表示不允许提交时包含不同换行符warn
则只在有不同换行符时警告false
则允许提价时有不同换行符存在配置方法
git config --global core.eol lf
git config --global core.autocrlf false
git config --global core.safecrlf true
虽然通过设置了 git 全局参数解决了问题,但是作为团队协作的话,并不能保证所有人都正确配好了。git 提供了.gitattributes文件解决了这个问题。在项目根目录新建.gitattributes文件,添加一下内容:
# Set the default behavior, in case people don't have core.autocrlf set.
* text eol=lf
# 指定不同文件 lf
*.js eol=lf
*.jsx eol=lf
*.json eol=lf
通过这种方式避免有人没有设置 core.autocrlf 参数,并且将该文件加入版本控制中。
另外根据需要 .gitattributes 文件可以在项目不同目录中创建,而一些非文本文件可以设置为二进制文件,不用考虑换行符问题。
https://blog.csdn.net/taiyangdao/article/details/78484623
.gitattributes 文件示例:
* text=auto
*.txt text
*.jpg -text
*.vcproj text eol=crlf
*.sh text eol=lf
*.py eol=lf
说明:
第1行,对任何文件,设置text=auto,表示文件的行尾自动转换。如果是文本文件,则在文件入Git库时,行尾自动转换为LF。如果已经在入Git库中的文件的行尾为CRLF,则该文件在入Git库时,不再转换为LF。
第2行,对于txt文件,标记为文本文件,并进行行尾规范化。
第3行,对于jpg文件,标记为非文本文件,不进行任何的行尾转换。
第4行,对于vcproj文件,标记为文本文件,在文件入Git库时进行规范化,即行尾为LF。但是在检出到工作目录时,行尾自动转换为CRLF。
第5行,对于sh文件,标记为文本文件,在文件入Git库时进行规范化,即行尾为LF。在检出到工作目录时,行尾也不会转换为CRLF(即保持LF)。
第6行,对于py文件,只针对工作目录中的文件,行尾为LF。
使用 git 自带工具 dos2unix
即可
使用
语法
$ dos2unix [-hkqV] [-c convmode] [-o file ...] [-n infile outfile ...]
选项
示例
dos2unix -k -o file1 file2 file3
, 如: 忽略 patch 目录下所有文件, 但 a_packarg_ 开头的文件除外, 顺序一定要对, 先忽略哪些, 再取消忽略哪些
/patch/**/*
!/patch/a_packarg_*
GitHub 即将抛弃 https 拉取仓库时使用 账号,密码 的方式, 而是采用 账号,token 的方式. 参考 文档 获取 token.
$ git clone https://github.com/username/repo.git
Username: your_username
Password: your_token
参考: https://help.github.com/en/github/authenticating-to-github/generating-a-new-gpg-key#generating-a-gpg-key
下载 gpg 命令行工具. https://www.gnupg.org/download/
生成 gpg, 命令: gpg --full-generate-key
, 期间会要求设置密码 passphrase, 查看秘钥是需要用到
$ gpg --full-generate-key
Real name: aaa
Email address: bbb@qq.com
Comment: ccc
You selected this USER-ID:
"aaa (ccc) "
gpg: C:/Users/asdasd/AppData/Roaming/gnupg/trustdb.gpg: trustdb created
...
pub rsa2048 2020-03-17 [SC]
wwwwwwwwwwwwwwwww // 公钥 signingkey, git 设置需要用到
uid aaa (ccc) <bbb@qq.com>
sub rsa2048 2020-03-17 [E]
查看 GPG key ID, 命令: gpg --list-secret-keys --keyid-format LONG
$ gpg --list-secret-keys --keyid-format LONG // 查看 GPG key ID
sec rsa2048/asdasdasd 2020-03-17 [SC] // asdasdasd, 这个就是 GPG key ID, 查看/导出 gpg 公钥/秘钥 需要用到
3A66AEDDD6B9305C256699918C5F94AB1E9C649A
uid [ultimate] aaa (ccc) <bbb@qq.com>
ssb rsa2048/aaaaaaaaa 2020-03-17 [E]
使用 GPG key ID 导出 公钥/秘钥
$ gpg --armor --output secret-key-gmail.txt --export-secret-keys asdasdasd // 秘钥, 会要求输入 passphrase
$ gpg --armor --output public-key-gmail.txt --export asdasdasd // 公钥
git config --global commit.gpgsign true
git config --global user.signingkey wwwwwwwwwwwwwwwww
查看 signingkey
$ gpg -k
C:/Users/wolegequ/AppData/Roaming/gnupg/pubring.kbx
---------------------------------------------------
pub rsa2048 2020-03-17 [SC]
wwwwwwwwwwwwwwwww
uid [ultimate] aaa (ccc) <bbb@qq.com>
sub rsa2048 2020-03-17 [E]
设置为 git 的 ssh.exe, 路径:
D:\Git\usr\bin\ssh.exe
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zcRiT15t-1596350269646)(http://yxbl.itengshe.com/20191220154654-1.png)]
FETCH HEAD
提交怎么破此时千万不要直接切到其他分支, 用当前分支
FETCH HEAD
为基础创建一个新分支 aaa, 然后推送远端, 然后本地切到master
分支, 拉去远端的分支, 也可以把 aaa 分支 merge 过来.
设置大小写敏感 并 清除缓存
git config core.ignorecase false
git rm -r --cached .
然后在 commit -> push 提交上去. 远端就是大小写敏感的 文件/文件夹