之前使用Github,感觉国内速度很慢,就想国内的Git服务器,推荐了使用oschina
1. 安装 git 工具 git bash 点击这里下载
具体安装步骤不说了 ,安装的时候选择 git bash
1.1安装好后, 在开始菜单中启动 git bash
1.2 使用ssh-keygen 工具生成公钥(public key)
ssh-kengen -t rsa -C "公钥key" 这里的key就是 注册oschina的邮箱. 执行时 3个回车
生成公钥在 当前路径的 .ssh文件夹中
公钥的(value) 就是 id_rsa.pub 里面的内容
查看生成的公钥,并将公钥内容拷贝添加到 http://git.oschina.net/keys 公钥管理里面
1.3 查看配置是否成功
看到 welcome to git@OSC 表示成功了
1.4 配置本地用户和邮箱
用户名邮箱作用 : 我们需要设置一个用户名 和 邮箱, 这是用来上传本地仓库到GitHub中, 在GitHub中显示代码上传者;
使用命令 :
git config --global user.name "finder" //设置用户名
git config --global user.email "xx@163.com" //设置邮箱
至此 git客户端已经安装和配置完成了,可以从oschina上传下载了。
2. 使用 TortoiseGit GUI工具上传下载代码
1. 在 oschina 上新建项目 prj01
2. 把本地的项目导入prj01
右键项目文件夹 =》Git create repository here => Git add => git commit => git push (会先提示git pull)
在进行pull 出现错误: fatal: refusing to merge unrelated histories
这时 打开 git bash 进入到 此 repo中
执行 $ git pull origin master --allow-unrelated-histories
注意 要加 --allow-unrelated-histories 参数
因为 我是把之前的本地仓库导入到 oschina上新建的仓库 ,所以2个仓库不同 需要先 pull ,把亮哥不同项目合并
3. 下载OSCHINA上项目 本地存在此项目非空目录 关联项目问题
解决的办法是:
1. 进入非空目录,假设是 /workdir/proj1
2. git clone --no-checkout https://git.oschina.net/NextApp/platform.git tmp
3. mv tmp/.git . #将 tmp 目录下的 .git 目录移到当前目录
4. rmdir tmp
5. git reset --hard HEAD
就可以了
项目中使用私有库
1. git 公钥加入到 git 服务器
1.1 将 ssh 转化 http 请求
git config --global url.git@gitee.com:.insteadOf https://gitee.com/
2. 支持代理,和直接拉代码
go env -w GOPROXY=https://goproxy.io,direct
3. 通过 GOPRIVATE 控制私有库不走代理
go env -w GOPRIVATE=*.gitlab.com,gitee.com
4. 其他
如果在运行go mod vendor时,提示Get https://sum.golang.org/lookup/xxxxxx: dial tcp 216.58.200.49:443: i/o timeout,则是因为Go 1.13设置了默认的GOSUMDB=sum.golang.org,这个网站是被墙了的,用于验证包的有效性,可以通过如下命令关闭:
goenv-w GOSUMDB=off
私有仓库自动忽略验证
可以设置 GOSUMDB="sum.golang.google.cn", 这个是专门为国内提供的sum 验证服务。
goenv-w GOSUMDB="sum.golang.google.cn"goenv-w GOSUMDB="sum.golang.org"
-w 标记 要求一个或多个形式为 NAME=VALUE 的参数, 并且覆盖默认的设置
苹果电脑需要加一步:
$ ssh-keygen -p. 设置密码 第一次输入 ,其他直接回车 就可以正常拉代码了
私有库解决方案3 TOKEN
第一步,你需要获取到私有的 token,它位于:
https://gitlab.mycompany.com/profile/account
第二步,配置你的 git,加入你的私有 token:
$ git config --global http.extraheader "PRIVATE-TOKEN: YOUR_PRIVATE_TOKEN
第三步,将 ssh 转化 http 请求,如下:
$ git config --global url."git@gitlab.mycompany.com:".insteadOf "https://gitlab.mycompany.com/"
````
最后,使用你的 go get 吧!
才找到真正的原因,公司网络比较缓慢情况下,就断开了
git config --global http.lowSpeedLimit 0
git config --global http.lowSpeedTime 999999
增加最低速度时间,总算把代码克隆下来了。
docker中accessTokens拉取私有git仓库
背景
当需要git clone拉取私有库时,传统的做法为将本机的ssh配置到gitlab中。但在docker中执行程序时需要拉取私有库,此时无法为每个docker容器配置ssh。网上的一种方案为,将配置好的ssh同步到docker容器中,覆盖其中的ssh秘钥等,但在尝试过程中,发现了问题,ssh秘钥需要验证是否被盗用(可能有解决办法),因此我尝试换种方案。
解决办法
使用gitlab中的accessTokens。
1、登录到GitLab.
2、点击右上角的头像,然后选择设置 .
3、在" 用户设置"菜单上,选择" 访问令牌" .
4、选择令牌的名称和可选的到期日期.
5、选择所需的范围 .
6、单击创建个人访问令牌按钮.
7、将个人访问令牌保存在安全的地方. 离开或刷新页面后,将无法再次访问它.
从而在docker容器中可以通过如下方式使用:
使用 username + accessToken 的方式克隆项目 但是 这个方式 拉取不下来
git clone https://$accessUserName:$accessToken@gitlab.com/.../xxx.git
https://starxs:1f93bf90070e2f1d5b31eb3f02d16@gitee.com/starxs/cps-data-api.git
accessToken拉取仓库时通常使用的是https协议,但我们的脚本程序中有较多的拉取使用的git协议,为了统一处理,使用git config --global --add url."".insteadOf“”方式处理,如下所示:
export accessUserName="......."
export accessToken="........"
git config --global --add url."https://$accessUserName:$accessToken@gitlab.com/".insteadOf "git@gitlab.com/"
git config --global --add url."https://$accessUserName:$accessToken@gitlab.com/".insteadOf "git@gitlab.com:"
git config --global --add url."https://$accessUserName:$accessToken@gitlab.com/".insteadOf "https://gitlab.com/"
git config --global --add url."https://$accessUserName:$accessToken@gitlab.com/".insteadOf "https://gitlab.com:"
可以使用 oauth2 + accessToken 的方式克隆项目.
gitee oauth2方式拉取成功
https://oauth2:1f93bf90070e2f1d5b31eb3f0@gitee.com/starxs/cps-data-api.git
在开发中,通常会保持两个分支master分支和develop分支,但是如果因为develop上面迭代太多而没有及时维护master,最后想丢弃master而直接将测试确认过的develop强推到master,该怎么操作呢?
1.切换到develop分支下,并保证本地已经同步了远端develop的最新代码
-
git checkout develop
-
git pull
2.把本地的develop分支强制(-f)推送到远端master。
git push origin develop:master -f
3.切换到旧分支master
git checkout master
4.下载远程仓库最新内容,不做合并。
git fetch --all
5.把HEAD指向master最新版本。
git reset --hard origin/master