Git是版本控制系统的一种,用来维护多人协作项目的开发进程。
首先来看看单人开发的需求,最原始的VCS就在你我身边😂:一系列word文档
假如在本地保存了多个版本,HEAD
总是指向最新的版本:
如果Version 3出现了严重的bug,可以回退到Version
2继续操作。但是如果Version
3包含了很多我们希望保留的change,就需要将其与Version
2比对,而后将这些changes拷贝到Version
2,一个好的VCS就需要支持diff
操作帮程序员们找到两个版本之间的差异。
除此之外,为了防止本地机器故障,我们希望把本地的所有版本都在云上备份,这样即使你的设备原地爆炸,也不用担心被老板炒鱿鱼。
另外,你可以借助云的中转实现多地工作。当然偶尔也会出现一些小问题:假如现在云上和本地的稳定版本都是Version
5,你996下班后还想为公司做贡献,就在家里开始对Version
5一顿操作得到了Version 5L却忘了上传,第二天上班在公司又是对Version
5一通different的操作得到了Version
5D并上传,第二天下班从云上直接拉取Version 5D到本地,价值几个亿的Version
5L就再也找不到了...这里就需要merge
操作来合并分支。
更重要的是,程序员们可以随时随地借助云上的备份进行协作,完成超大项目的撕逼工作。
为了保证出bug有人背锅,还需要记录who/when/what,VCS里叫做annotate/blame
。
1 | git init # 将该目录用Git管理 |
Standard Workflow
- fork remote repo
truck
to personal remote repomy-truck
, enable fork syncing to keep branches and tags automatically in sync withtruck
- clone
my-truck
to local, aka shadow repo, usinggit clone https://xxx.git
- pull changes from
my-truck
to sync shadow repo on the branch you want,git pull
- create and checkout a new branch
new-branch
in shadow repo - make your changes on
new-branch
, test your code is ok - add and commit your changes on
new-branch
in shadow repo - checkout to
master
, pushnew-branch
tomy-truck
usinggit push origin new-branch
- submit PR to merge
new-branch
onmy-truck
to desired branch ontruck
其他的workflow:
- change name of truck repo from origin to upstream, origin points to personal remote repo
- switch to branch A, pull remote repo to sync up
- switch to branch B, merge it to branch A
- push it to personal remote repo
Use Case
- 在某个分支
test
上进行了修改,并提交了commit,push到个人的remote分支,提交了PR,但还没有被merge。此时需要再次修改test
,但要合并两次commit,并且需要保留前1次/后1次的commit信息。
1
2
3git commit ## second edit and commit
git rebase -i HEAD~2 ## pick, squash, then popup and edit the commit msg. if fixup, no popup and the msg will be the pick one
git push origin test --force
代理配置
Windows
Windows设置git bash走代理
1 | git config --global http.proxy http://127.0.0.1:22335 |
Windows设置CMD走代理
1 | set http_proxy=http://127.0.0.1:22335 & set https_proxy=http://127.0.0.1:22335 |
Windows设置Power Shell走代理
1 | $Env:http_proxy="http://127.0.0.1:22335";$Env:https_proxy="http://127.0.0.1:22335" |
WSL
WSL2配置(以Clash
为例):
- 打开
System Proxy
和Allow LAN
- 在防火墙里允许
Clash
专用和公用 - 写一个脚本
proxy.sh
,然后通过source ./proxy.sh set
,source ./proxy.sh unset
,source ./proxy.sh test
开启、关闭、查看代理
1 | !/bin/sh |
虚拟机配置
- 打开Host
Clash的
System Proxy
和Allow LAN
ipconfig
查看VMWare Network Adapter VMnet1地址为x- 将虚拟机的网络连接设置为NAT模式
- 将虚拟机网络中的
Network Proxy
设为Manual
,ip配为x,端口配为Clash
的代理端口7890 - 重启terminal
Refs
Version
Control (Git)
Reading
5: Version Control
日常开发中用到的一些代理配置方式
WSL2配置代理