这里记录如何为开源做贡献,经过摸索,也走过不少坑,但仍然有更多的坑等着。
所以要小心和简单,不要搞复杂了,对应我们这样的纯粹就是为了写点代码的人而言。
将项目fork到自己的git账户下后,在本机clone下来2个地方,一个地方用于开发,一个地方将更新同步过来后专门用于push到自己的git账户上,然后pull request到官方。这样保证pr的东西很清爽。

cmd真实记录

Administrator@DESK-XDIGIWSFLS MINGW64 /d/gowork/src/github.com/3xxx
$ git clone https://github.com/3xxx/mindoc.git
Cloning into 'mindoc'...
remote: Enumerating objects: 11960, done.
remote: Counting objects: 100% (823/823), done.
remote: Compressing objects: 100% (595/595), done.
remote: Total 11960 (delta 284), reused 675 (delta 213), pack-reused 11137
Receiving objects: 100% (11960/11960), 90.08 MiB | 10.69 MiB/s, done.
Resolving deltas: 100% (6172/6172), done.

Administrator@DESK-XDIGIWSFLS MINGW64 /d/gowork/src/github.com/3xxx
$ cd mindoc

Administrator@DESK-XDIGIWSFLS MINGW64 /d/gowork/src/github.com/3xxx/mindoc (master)
$ git remote add upstream https://github.com/mindoc-org/mindoc.git

Administrator@DESK-XDIGIWSFLS MINGW64 /d/gowork/src/github.com/3xxx/mindoc (master)
$ git remote -v
origin  https://github.com/3xxx/mindoc.git (fetch)
origin  https://github.com/3xxx/mindoc.git (push)
upstream        https://github.com/mindoc-org/mindoc.git (fetch)
upstream        https://github.com/mindoc-org/mindoc.git (push)

Administrator@DESK-XDIGIWSFLS MINGW64 /d/gowork/src/github.com/3xxx/mindoc (master)
$ git fetch upstream master
From https://github.com/mindoc-org/mindoc
 * branch            master     -> FETCH_HEAD
 * [new branch]      master     -> upstream/master

以后每次上传前,从这里开始:这里先更新一下
意思是从官方拉取更新(如果有更新),而不是从你的git上拉取更新
Administrator@DESK-XDIGIWSFLS MINGW64 /d/gowork/src/github.com/3xxx/mindoc (master)
$ git pull upstream master
remote: Enumerating objects: 1, done.
remote: Counting objects: 100% (1/1), done.
remote: Total 1 (delta 0), reused 1 (delta 0), pack-reused 0
Unpacking objects: 100% (1/1), 859 bytes | 859.00 KiB/s, done.
From https://github.com/mindoc-org/mindoc
 * branch            master     -> FETCH_HEAD
   397dced..db620be  master     -> upstream/master
hint: Waiting for your editor to close the file...
/usr/bin/bash: line 1: q: command not found

shell returned 127

Press ENTER or type command to continue
Merge made by the 'ort' strategy.

开始将本机更新代码添加到更新队列
Administrator@DESK-XDIGIWSFLS MINGW64 /d/gowork/src/github.com/3xxx/mindoc (master)
$ git add .

Administrator@DESK-XDIGIWSFLS MINGW64 /d/gowork/src/github.com/3xxx/mindoc (master)
$ git commit -m "update images upload"
[master af88388] update images upload
 2 files changed, 306 insertions(+), 260 deletions(-)

Administrator@DESK-XDIGIWSFLS MINGW64 /d/gowork/src/github.com/3xxx/mindoc (master)
$ git push
warning: ----------------- SECURITY WARNING ----------------
warning: | TLS certificate verification has been disabled! |
warning: ---------------------------------------------------
warning: HTTPS connections may not be secure. See https://aka.ms/gcm/tlsverify for more information.
warning: ----------------- SECURITY WARNING ----------------
warning: | TLS certificate verification has been disabled! |
warning: ---------------------------------------------------
warning: HTTPS connections may not be secure. See https://aka.ms/gcm/tlsverify for more information.
Enumerating objects: 17, done.
Counting objects: 100% (17/17), done.
Delta compression using up to 20 threads
Compressing objects: 100% (8/8), done.
Writing objects: 100% (9/9), 3.21 KiB | 3.21 MiB/s, done.
Total 9 (delta 7), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (7/7), completed with 7 local objects.
To https://github.com/3xxx/mindoc.git
   397dced..af88388  master -> master

1 win下编译mindoc

修改conf里
注释掉mysql
取消sqlite注释
拷贝一个sqlite数据库到database文件夹里,更名为mindoc.db
cmd进入mindoc文件夹
因为用sqlite需要cgo,go env -w CGO_ENABLED=1
https://blog.csdn.net/qq_43625649/article/details/134488353

D:\gowork>cd src\github.com\mindoc
D:\gowork\src\github.com\mindoc>bee run

2 Fork 这个项目

点一下fork按钮即可。

3 Clone 已经 fork 的项目

当你 fork 一个项目之后,你需要把它克隆到你的电脑上,这样你才能开始工作。
要 clone 这个项目,你先打开你自己的 GitHub 主页,找到 fork 过来的项目,打开后点击右上角的 “Clone or download” 按钮,得到复制的地址。
GitHub 为克隆项目提供了两种传输协议: HTTPS 和 SSH 。关于这个主题的更多内容可以看这里。这里假设你决定使用 HTTPS 。
当你复制了项目 URL,你可以在 Git 客户端或者 shell 里 clone 项目:

$ git clone https://github.com/mindoc-org/mindoc.git
Clone 一个项目会在你的硬盘上创建一个文件夹,里面有项目的所有文件,还有跟踪文件变化的 git 文件夹。
特别注意:

  1. clone到本地的项目文件夹作为将来提交的文件夹,因此要保持干净,不要在这里面进行开发调试。
    本地开发调试要另外再clone这个项目,完成开发后把个别修改的文件同步到前面clone的文件夹里,然后在它里面进行git push等提交代码操作。
  2. 提交到自己github上fork的项目里后,再进行pull request操作。

    4 设置克隆过来的项目

    进入克隆过来的项目文件夹,将原来项目的 URL (官方)添加到你的本地代码仓库,这样你就可以随时从原来的项目 pull 最新的修改:

$ git remote add upstream url
我用 upstream (上游、官方) 作为远程仓库的名字,这是 GitHub 的风格,但是你可以用任何名字。

现在远程仓库列表是这样的:

Administrator@DESK-XDIGIWSFLS MINGW64 /d/gowork/src/github.com/mindoc (master)
$ git remote add upstream https://github.com/mindoc-org/mindoc.git

Administrator@DESK-XDIGIWSFLS MINGW64 /d/gowork/src/github.com/mindoc (master)
$ git remote -v
origin https://github.com/engineercms/mindoc.git (fetch)
origin https://github.com/engineercms/mindoc.git (push)
upstream https://github.com/mindoc-org/mindoc.git (fetch)
upstream https://github.com/mindoc-org/mindoc.git (push)

这里创建了一个叫做upstream(官方)的与源代码origin关联,关联之后,就可以同步源代码库的其他分支到自己的仓库了
在你把自己的修改 push 到你的 fork 之前,从上游(官方)拉回一次新的变动。

Administrator@DESK-XDIGIWSFLS MINGW64 /d/gowork/src/github.com/mindoc (master)
$ git fetch upstream master
From https://github.com/mindoc-org/mindoc

  • branch master -> FETCH_HEAD
  • [new branch] master -> upstream/master

Administrator@DESK-XDIGIWSFLS MINGW64 /d/gowork/src/github.com/mindoc (master)
$ git pull upstream master
From https://github.com/mindoc-org/mindoc

  • branch master -> FETCH_HEAD
    Already up to date.

5 推送

Administrator@DESK-XDIGIWSFLS MINGW64 /d/gowork/src/github.com/mindoc (master)
$ git add .
warning: in the working copy of ‘conf/app.conf.example’, LF will be replaced by CRLF the next time Git touches it

Administrator@DESK-XDIGIWSFLS MINGW64 /d/gowork/src/github.com/mindoc (master)
$ git commit -m “add prev&next in default read.tpl”
[master 2988fab] add prev&next in default read.tpl
11 files changed, 1776 insertions(+), 95 deletions(-)
create mode 100644 conf/app.conf.example
delete mode 100644 uploads/202404/cover_17c7b2c6745688e0.png
create mode 100644 uploads/202404/cover_17c8260e47e06f18_small.png
create mode 100644 uploads/202404/cover_17c8286be57a8600_small.png
create mode 100644 uploads/202404/cover_17c829abdef5fdc8.png
create mode 100644 uploads/books/2/book.zip
create mode 100644 views/document/test.tpl
delete mode 100644 “win\344\270\213\347\274\226\350\257\221.md”

Administrator@DESK-XDIGIWSFLS MINGW64 /d/gowork/src/github.com/mindoc (master)
$ git push
warning: —————– SECURITY WARNING —————-
warning: | TLS certificate verification has been disabled! |
warning: —————————————————
warning: HTTPS connections may not be secure. See https://aka.ms/gcm/tlsverify for more information.
warning: —————– SECURITY WARNING —————-
warning: | TLS certificate verification has been disabled! |
warning: —————————————————
warning: HTTPS connections may not be secure. See https://aka.ms/gcm/tlsverify for more information.
Enumerating objects: 33, done.
Counting objects: 100% (33/33), done.
Delta compression using up to 20 threads
Compressing objects: 100% (19/19), done.
Writing objects: 100% (21/21), 249.03 KiB | 27.67 MiB/s, done.
Total 21 (delta 11), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (11/11), completed with 11 local objects.
To https://github.com/engineercms/mindoc.git
6054b5f..2988fab master -> master

1. 问题一

甲乙两个程序员正在合作开发一款程序,甲晚上10点push了自己编辑的test.txt文档到GitHub。
乙11点也想要push自己编辑过后的test.txt文档到GitHub,因为乙本地仓库不是最新,乙push时会报错,乙如果使用git pull拉取最新版本,那自己修改的东西丢失了怎么办?
解决办法:
先把自己修改好的代码存放在缓存里,等最新代码拉取下来以后再恢复缓存里的自己修改的代码,乙再push。
前提是两人不要修改相同的地方,可能会产生冲突!
步骤如下:

git stash save "这里是注释"
git pull
git stash pop
git stash list
git stash show

2. 问题二

乙在上个问题背景时不知道甲做了提交,直接commit了自己的test.txt文件,想取消自己的commit怎么办?
解决办法:

git reset --soft HEAD^

原文链接:https://blog.csdn.net/m0_61502213/article/details/120620168

git-拉取代码不覆盖本地修改的代码

1 先将本地代码放在暂存区:

git stash

2 将远程gitlab上代码拉取下来:

git pull

3 将1中暂存区的代码放回本地:

git stash pop

4 接下来将代码合并到master:

4.1 提交到远程库:

方法一:提交tracked的修改

git commit -am 'comment code1'
git push

方法二:提交未tracked的修改

git add -u
git commit -m 'comment code1' 
git push

4.2 codereview:

arc diff origin/master

4.3 合并到master:

arc land --onto master

其他:

git add -u <==> git add –update

提交所有被删除和修改的文件到数据暂存区

git add .

提交所有修改的和新建的数据暂存区

git add -A <==>git add –all

提交所有被删除、被替换、被修改和新增的文件到数据暂存区

【gitHub】在提PR(pull request)时提交指定的commit

一、背景
今天在提PR的时候,发现以前一些旧的commit也一起被提交上去了,这样比较不友好,在网上研究了一些方法,在这里总结记录一下。

二、方法
对于方法博主研究后有两种,一种是通过版本非强制回退,然后再重新commit一次,这样就能够合并之前的所有commit。另外一种是通过使用cherry-pick选择commit进行提交。博主推荐使用第二种。

2.2.使用cherry-pick进行提交
cherry-pick是在新分支下选择本地分支的commit记录进行合并的操作,因此只需要在本地新建一个上游仓库(注意不是远程仓库)的本地分支,再合并想要提交的commit即可。

首先,配置上游仓库地址并同步。

git remove add upstream XXX.git // XXX.git是上游仓库地址
git fetch

在github上或者在本地运行git log选取commit记录。
注意:需要选择上次PR之后的除了merge操作的所有commit的id。

在本地从上游仓库中拉取新的分支。
注意:upstream是上游仓库,在第一步配置过;origin是自己的远程仓库;main是主分支名。

git checkout -b new_branch upstream/main

在new_branch的分支上cherry-pick所有commit记录。
注意:要选择所有未提交PR的所有commit,这样才不会出错。

git cherry-pick commit_id1 commit_id2 commit_id3 ......

将新分支推送到远程仓库。

git push origin new_branch

在github提PR的时候选择新推送的分支即可。

PR被接受后,可选择删除新建立的本地分支和远程分支。

git branch -D new_branch // 在main分支删除new_branch分支
git push origin --delete new_branch // 删除远程仓库分支
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/wuchus/article/details/126018674

作者:秦晓川  创建时间:2024-06-09 14:30
最后编辑:秦晓川  更新时间:2024-06-16 14:21