【学习笔记】git usage

之前没有使用过 github 的 repo,跟着 AI 做总是自闭,最近成功实现了一些功能,大概思考了一下其中的梗概一二,随手记录一下

【网络连接】

服务器上 ping github.com 正常运行了,不代表 git push 时进行网络连接能成功。

如果 git push 时网络连接失败,可以检查自己的 repo url 是 http 格式还是 ssh 格式,如果是 http 格式,那么可以尝试改成 ssh 格式,并按照下述操作通过 ssh 工具进行 git push:

想使用 ssh ,得先把本地的 id_rsa.pub 中的公钥放到 github 网站上。(存在一些手段使用命令行实现这件事情,但是我觉得用网页端也很简单。)

可以通过 ssh -T git@github.com 来进行检查。如果成功,那么会输出类似 Hi <username>.... 的回复,是一个很好的检查方法。如果失败,可以看一下 .ssh 文件下的 config 中 github.com 这一个 Host 对应的一些信息,例如 post 是不是 22(AI 会告诉你可能可以改成 443,我的理解是哪个不行换另一个),

实现 ssh 连接后,需要把 remote repo 的 url 改成 ssh 格式的,ssh 格式的地址可以在网页端找到,使用 git remote set-url origin <address> 来改(这里有一个 origin 意义不明。一种可能的理解是,origin 可以理解成 <remote repo name> 变量,如果一个local directory 对应多个 remote repo,需要 push 到不同的地方,可以通过 git remote add <name> <URL> 来搞)

这样就把 remote repo address 改成了 ssh 格式的,为后面使用 ssh 工具进行文件传输奠定了基础。

【submodule 黑洞】

在 AI 的带领下,我在 project 的两个子目录里面执行了 git init 命令,给这两个文件夹包装成了 submodule。如果我们把这这两个子文件夹作为 root dir,也分别创建独立的 github repo sub1 sub2,那么在网页端当前 repo 的 sub1 sub2 会连接到对应的 github repo;可想而知,如果submodule 没有显式的 repo,那么你这俩 submodule 成了黑洞。

不想受 submodule 影响的最简单解决方案就是把 .git 文件删了。同时在 project 的根目录通过 git rm --cached eagle -f 删掉过去对 eagle 的理解,让它洗心革面,重新当 directory。

【.gitignore】

可以在当前 project 根目录下添加 .gitignore 文件。这个文件里面每一行可以输入一个 path,表示这个地址的文件不需要跟踪它的修改,在对全文件夹进行的git add . 时也会忽略它们(vscode 的文件追踪器也就不再追踪它的变化了)。支持使用 # 进行注释。

举一个例子,我进行了大量模型训练,在当前目录下保留了大量 checkpoint,这东西肯定没必要上传到 repo,于是 ignore 掉 checkpoint 文件夹即可。内容量庞大的语料库也类似

【branch switching】

配置好网络连接、登陆信息后,使用 git fetch 获得 remote repo 的最新结构情况。再用 git checkout <new branch name> 换就行了。

建议:养成好习惯,如果基于别人的 repo 做增量开发,先 fork,再建立一个新 branch,clone 下来新 branch 做迭代。可以减少命令行操作失误的损失。比如 git clone 下来是 main branch,想上传到 new_branch 这个分支上。如果你在 main branch 上已经改了一堆了,慌慌张张把 new_branch 上的东西 pull 下来,就全白瞎了。

【git push 时遇到 remote repo version far ahead】

在 push 时,原 repo 应当刮目相看了。命令行的建议时先 pull 再 push。pull 时有若干选项,第一个是 --rebase,也就是用 remote repo 把 local 替换掉;第二个是 --no-rebase,也就是忽略云端变化;另有一个是 --merge(重名文件的 merge 情况我不清楚)。

另有一个 --allow-unrelated-histories 的选项,在把一个full local directory push 到一个 empty remote repo 时是很有用的

【Unknown?】

  • master branch 是啥?

  • 怎么 merge?比如原有 main branch code,现新开发 version 2.0,希望 main branch 变成 2.0 的 backup。

posted @ 2025-03-26 17:03  没学完四大礼包不改名  阅读(27)  评论(1)    收藏  举报