git - 做远程url的本地库

git - 做远程url的本地库

概述

开源工程如果在github上,迁出时,网络质量不好。
如果用IDEA从url创建工程, 会因为git工程url迁出过程中断, 导致工程创建失败。

笔记

折中的方法根据原始git库是否可访问分别处理.
有2种情况,如下:

开源工程的git url可访问

开源工程的url存在,将开源工程导入国内git托管网站(e.g. gitee), 然后用IDEA从国内可良好访问的git托管站点的克隆工程的url创建本地工程

开源工程的git url不可访问

  • 仅有本地的git迁出库(无法访问原始库的url, 或者原始库的url已经不在了(自己的原始库已经被自己删掉了)). 这种需要自己在本地建立git空库,然后用git命令将迁出库的内容push到空库,然后用IDEA从自己建立的git库,用url来建立工程。

这种不好的地方 : 建立的git库的分支不全,如果需要的分支不在库中,需要在本地的原始迁出库中切换分支,再push到本地的git库。所以原始可用的git迁出库必须始终保留,防止哪一天会用上。

在gitee站点导入url建立托管库的操作

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
由于网络原因,也不一定能一次拉取代码成功。
这时,可以等几分钟,再点击已经建立的空工程的强制更新按钮, 再尝试从远程原始仓库拉取代码。
在这里插入图片描述
国内托管站点的网络情况比咱们个人的网络情况要好的多,一般都能拉取原始库的url成功。

迁出测试

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到,在gitee上做的二次托管库是正常的,且工程分支拓扑图和原始openpnp工程一样。

在gitea中导入本地迁出库作为新库的操作

建立空目录和git操作脚本

在这里插入图片描述

call_cmd_here.cmd
@echo off
rem call_cmd_here.cmd
call cmd.exe
pause

list_rep_user.bat

@echo off
rem list_rep_user.bat
set PATH=C:\Program Files\Git\bin;C:\Program Files\Git\cmd;C:\soft\gitea;%PATH%
call gitea --work-path E:\my_git_rep\rep_openpnp_test\openpnp admin user list
PAUSE

create_rep_user_pwd.bat
@echo off
rem create_rep_user_pwd.bat
set PATH=C:\Program Files\Git\bin;C:\Program Files\Git\cmd;C:\soft\gitea;%PATH%
call gitea --work-path E:\my_git_rep\rep_openpnp_test\openpnp admin user create --admin --username my_name --password my_pwd --email my_email@sina.com --access-token
PAUSE
env_git.bat
@echo off
rem env_git.bat
set PATH=C:\Program Files\Git\bin;C:\Program Files\Git\cmd;C:\soft\gitea;%PATH%
call cmd.exe
modify_rep_user_pwd.bat
@echo off
rem modify_rep_user_pwd.bat
set PATH=C:\Program Files\Git\bin;C:\Program Files\Git\cmd;C:\soft\gitea;%PATH%
call gitea --work-path E:\my_git_rep\rep_openpnp_test\openpnp admin user change-password -u my_name -p my_pwd
PAUSE

run_gitea_doctor.bat
@echo off
rem run_gitea_doctor.bat
set PATH=C:\Program Files\Git\bin;C:\Program Files\Git\cmd;C:\soft\gitea;%PATH%

echo next, list gitea doctor runing
call gitea --work-path E:\my_git_rep\rep_openpnp_test\openpnp doctor check

echo END
pause
run_gitea_on_openpnp.bat
@echo off
rem run_gitea_on_openpnp.bat
set PATH=C:\Program Files\Git\bin;C:\Program Files\Git\cmd;C:\soft\gitea;%PATH%
call gitea --work-path E:\my_git_rep\rep_openpnp_test\openpnp
view_rep_user_list.bat
@echo off
rem view_rep_user_list.bat
set PATH=C:\Program Files\Git\bin;C:\Program Files\Git\cmd;C:\soft\gitea;%PATH%
call gitea --work-path E:\my_git_rep\rep_openpnp_test\openpnp admin user list
PAUSE

启动gitea新库网页

运行 run_gitea_on_openpnp.bat
在这里插入图片描述

在浏览器中运行 http://localhost:3000/
在这里插入图片描述
在这里插入图片描述
数据库选sqlite3, 其他不用改,点击"立即安装"
在这里插入图片描述
因为这时库里面还没有用户名和口令,不能登录

运行 create_rep_user_pwd.bat, 建立用户名和口令
在这里插入图片描述
现在用自己在create_rep_user_pwd.bat的用户名和口令登录gitea网页。
在这里插入图片描述
登录后,gitea空库就建立好了。
退出网页,关闭gitea控制台,备份gitea空库环境
在这里插入图片描述
压缩备份空库环境,给后续实验用. 可以看到空库很小。里面还没有引起任何git库。
重新运行 run_gitea_on_openpnp.bat
重新在浏览器中运行gietea的url, 登录。

用现有git库迁出工程向gitea空库中push进新库

在这里插入图片描述
网络质量好时,已经从github上迁出了一个原始库。
将原始库拷贝一个版本(openpnp_github_copy)做实验
打开 env_git.bat

cd /d D:\3rd\openpnp_github_copy

# 先看一下迁出的本地库的远程url是否改为了我们自己建立的库url
$ git remote -v
origin  git@github.com:openpnp/openpnp.git (fetch)
origin  git@github.com:openpnp/openpnp.git (push)

# 如果本地库的url不是我们自己建立url, 改成我们自己的url
# git remote set-url origin <新仓库地址>
git remote set-url origin http://localhost:3000/my_name/openpnp.git

# 如果下面的推送失败,删掉windows凭证(控制面板/用户账户/凭据管理器)中和localhost:3000有关的凭证
# 同时登录这个库的管理网页。

# 推送到自己的库
git push --mirror

# 建立一个新库openpnp, 这个库在已经存在的gitea用户名下
# git remote add orgin http://localhost:3000/my_name/openpnp.git
# 此时用gitea网页查看,库还是没有
# 已经确认过,这个命令只是在config文件中加了一个远程push的目的url, 所以这步不用做,还有副作用。

# 可以看到,自己在本地建立的分支和库原来的分支和tag都推送到自己的git服务端了。
$ git push --mirror
warning: use of unencrypted HTTP remote URLs is not recommended; see https://aka.ms/gcm/unsaferemotes for more information.
Enumerating objects: 864846, done.
Counting objects: 100% (864846/864846), done.
Delta compression using up to 16 threads
Compressing objects: 100% (58630/58630), done.
Writing objects: 100% (864846/864846), 341.33 MiB | 65.48 MiB/s, done.
Total 864846 (delta 797359), reused 864815 (delta 797341), pack-reused 0 (from 0)
remote: Resolving deltas: 100% (797359/797359), done.
remote: ....................... Processing 23 references
remote: Processed 23 references in total
To http://localhost:3000/LostSpeed/my_openpnp.git
 * [new branch]            Branch_2.2 -> Branch_2.2
 * [new branch]            branch_2.0 -> branch_2.0
 * [new branch]            main -> main
 * [new reference]         origin/HEAD -> origin/HEAD
 * [new reference]         origin/dependabot/maven/org.apache.xmlgraphics-batik-transcoder-1.17 -> origin/dependabot/maven/org.apache.xmlgraphics-batik-transcoder-1.1
7
 * [new reference]         origin/dependabot/maven/org.python-jython-standalone-2.7.2 -> origin/dependabot/maven/org.python-jython-standalone-2.7.2
 * [new reference]         origin/feature/camera_arch -> origin/feature/camera_arch
 * [new reference]         origin/feature/ci -> origin/feature/ci
 * [new reference]         origin/feature/nav-view -> origin/feature/nav-view
 * [new reference]         origin/feature/package-viz -> origin/feature/package-viz
 * [new reference]         origin/feature/placement-part-decouple -> origin/feature/placement-part-decouple
 * [new reference]         origin/feature/remove-tabs -> origin/feature/remove-tabs
 * [new reference]         origin/feature/visual-training -> origin/feature/visual-training
 * [new reference]         origin/feature/web -> origin/feature/web
 * [new reference]         origin/gh-pages -> origin/gh-pages
 * [new reference]         origin/main -> origin/main
 * [new reference]         origin/test -> origin/test
 * [new tag]               1.0.0 -> 1.0.0
 * [new tag]               1.1.0 -> 1.1.0
 * [new tag]               2.0 -> 2.0
 * [new tag]               2.2 -> 2.2
 * [new tag]               Demo_Board_v1 -> Demo_Board_v1
 * [new tag]               v1-archive -> v1-archive

迁出试试。

找一个新目录,迁出试试。看看东西全不全?
git clone http://localhost:3000/LostSpeed/my_openpnp.git my_openpnp
然后可以用gitk和Sourcetree看看从本地迁出的东西全不全。
迁出后,默认大概率不在自己想要的分支中。
将迁出库的当前分支改为自己想要的那个分支。

git checkout -b branch_2.0 origin/branch_2.0

将迁出库配置中的url改为新建立的库地址

在这里插入图片描述
看到config文件中 “remote origin" 扇区有2个,一个是原始的, 一个时我们自己加的。
将自己加的那个url,改成第一个“remote origin"扇区中url的内容。
将我们自己通过命令加的“remote origin"扇区删除。
保存config, 关闭config.

在gitea中建立新库

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

只需要填写新库名称,其他不用改,点击"创建仓库"
在这里插入图片描述
空的新仓库很快就建立好了

将迁出副本中的内容push到自己建立的新库中

打开gitea网页(http://localhost:3000/), 并登录
在已经运行的env_git.bat控制台中(且已经cd到了git迁出库的副本目录),输入push命令

git push -u origin

此时,gitea网页弹出授权许可提示,点击允许。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
可以看到,只是将当前分支push到仓库中了。
在这里插入图片描述
在这里插入图片描述

在网上查了一下,如何将本地迁出的仓库副本的所有分支都push到git服务端的仓库。
找到了一个(https://stackoverflow.com/questions/6865302/push-local-git-repo-to-new-remote-including-all-branches-and-tags)

尝试一下

# push 本地git库迁出副本的所有分支到git服务端
git push origin '*:*'

Everything up-to-date
# 看了一下,这个并没有用,并没有向上传新东西
# 重新迁出后,也没有看到新增git内容(分支,tag)

git push origin --all
# 没用

git push origin --tags

D:\3rd\openpnp_github_copy>git push origin --tags
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Delta compression using up to 16 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 416 bytes | 416.00 KiB/s, done.
Total 3 (delta 0), reused 3 (delta 0), pack-reused 0 (from 0)
remote: ... Processing 3 references
remote: Processed 3 references in total
To http://localhost:3000/my_name/openpnp.git
 * [new tag]               1.0.0 -> 1.0.0
 * [new tag]               1.1.0 -> 1.1.0
 * [new tag]               Demo_Board_v1 -> Demo_Board_v1
# 这个命令将tag传上去了。

上述2个命令,将当前分支和所有的tag都push到了服务端。
可以用一个命令来做这2个事情。

git push origin --mirror

D:\3rd\openpnp_github_copy>git push origin --mirror
Enumerating objects: 809023, done.
Counting objects: 100% (807364/807364), done.
Delta compression using up to 16 threads
Compressing objects: 100% (43634/43634), done.
Writing objects: 100% (806963/806963), 263.64 MiB | 66.43 MiB/s, done.
Total 806963 (delta 761817), reused 806570 (delta 761508), pack-reused 0 (from 0)
remote: Resolving deltas: 100% (761817/761817), completed with 200 local objects.
remote: .................... Processing 20 references
remote: Processed 20 references in total
To http://localhost:3000/my_name/openpnp.git
 * [new reference]         origin/HEAD -> origin/HEAD
 * [new reference]         origin/dependabot/maven/org.apache.xmlgraphics-batik-transcoder-1.17 -> origin/dependabot/maven/org.apache.xmlgraphics-batik-transcoder-1.17
 * [new reference]         origin/dependabot/maven/org.python-jython-standalone-2.7.2 -> origin/dependabot/maven/org.python-jython-standalone-2.7.2
 * [new reference]         origin/develop -> origin/develop
 * [new reference]         origin/feature/camera_arch -> origin/feature/camera_arch
 * [new reference]         origin/feature/ci -> origin/feature/ci
 * [new reference]         origin/feature/nav-view -> origin/feature/nav-view
 * [new reference]         origin/feature/package-viz -> origin/feature/package-viz
 * [new reference]         origin/feature/placement-part-decouple -> origin/feature/placement-part-decouple
 * [new reference]         origin/feature/remove-tabs -> origin/feature/remove-tabs
 * [new reference]         origin/feature/visual-training -> origin/feature/visual-training
 * [new reference]         origin/feature/web -> origin/feature/web
 * [new reference]         origin/features/upgrade_openpnp_capture -> origin/features/upgrade_openpnp_capture
 * [new reference]         origin/gh-pages -> origin/gh-pages
 * [new reference]         origin/master -> origin/master
 * [new reference]         origin/revert-1142-NgUI -> origin/revert-1142-NgUI
 * [new reference]         origin/revert-1169-fix/various-bugfixes-from-work -> origin/revert-1169-fix/various-bugfixes-from-work
 * [new reference]         origin/revert-1180-revert-1169-fix/various-bugfixes-from-work -> origin/revert-1180-revert-1169-fix/various-bugfixes-from-work
 * [new reference]         origin/revert-1233-develop -> origin/revert-1233-develop
 * [new reference]         origin/test -> origin/test


非常惊喜,“git push origin --mirror” 这个命令将所有分支都传到了git服务端。
不过对于新建库才行,如果库中有东西,这个命令有风险,看了资料,这会删除库中原有的所有东西
重新迁出一次试试。
在这里插入图片描述
现在看到的分支拓扑图,只有当前分支相关的,但是没有其他分支的。
现在东西(所有分支,所有tag)确实已经都传上去了, 只能看看gitea服务端网页是否有重建所有分支的功能。

将所有分支都从git数据中重建出来

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
等待分支同步完成。
分支同步的需要的时间挺长的,如果不是刚需,还是不要同步。
但是对于手头有git库迁出副本,但是原始git库访问不到的情况,自己从手头git工程迁出副本重建了git库,此时进行分支同步,就是刚需了。

不好使

这个操作"将缺少的分支从git数据同步到数据库"不好使。
始终执行不完。
因为执行起来了,也不敢停。结果等到早上起来了,一看,都运行了20+个小时,还是没执行完。
那说明这个功能不好使,只能不用了。如果真好使,这么长时间也执行不完,说明也不实用啊。这么长时间谁等的起。
在这里插入图片描述
因为已经运行这么长时间了,也不敢强行关掉。
先推出网页的用户登录,再关掉网页,控制台。
再开始控制台,网页,重新迁出一次,看看分支拓扑图是否会出现新分支?
在这里插入图片描述
没变化,只能放弃这个不好使的功能。坑货。

从 git 数据同步标签到数据库 - 是否好使?

在这里插入图片描述
在这里插入图片描述
因为上一个操作"将缺少的分支从git数据同步到数据库"不好使,已经不信任gitea了。
这个操作实验只等30分钟,不好使就拉倒。

不好使

30分钟执行不完,放弃了

是不是从客户端推送时有其他命令可以push所有分支?

再研究一下 https://stackoverflow.com/questions/6865302/push-local-git-repo-to-new-remote-including-all-branches-and-tags

最终还得看官方文档 https://git-scm.com/docs/git-push

git push origin +refs/*
这个命令将所有东西都push进git服务端了
D:\3rd\openpnp_github_copy>git push origin +refs/*
Enumerating objects: 855850, done.
Counting objects: 100% (855850/855850), done.
Delta compression using up to 16 threads
Compressing objects: 100% (57854/57854), done.
Writing objects: 100% (855850/855850), 335.35 MiB | 66.74 MiB/s, done.
Total 855850 (delta 789294), reused 855850 (delta 789294), pack-reused 0 (from 0)
remote: Resolving deltas: 100% (789294/789294), done.
remote: ........................ Processing 24 references
remote: Processed 24 references in total
To http://localhost:3000/my_name/openpnp.git
 * [new branch]            develop -> develop
 * [new reference]         origin/HEAD -> origin/HEAD
 * [new reference]         origin/dependabot/maven/org.apache.xmlgraphics-batik-transcoder-1.17 -> origin/dependabot/maven/org.apache.xmlgraphics-batik-transcoder-1.17
 * [new reference]         origin/dependabot/maven/org.python-jython-standalone-2.7.2 -> origin/dependabot/maven/org.python-jython-standalone-2.7.2
 * [new reference]         origin/develop -> origin/develop
 * [new reference]         origin/feature/camera_arch -> origin/feature/camera_arch
 * [new reference]         origin/feature/ci -> origin/feature/ci
 * [new reference]         origin/feature/nav-view -> origin/feature/nav-view
 * [new reference]         origin/feature/package-viz -> origin/feature/package-viz
 * [new reference]         origin/feature/placement-part-decouple -> origin/feature/placement-part-decouple
 * [new reference]         origin/feature/remove-tabs -> origin/feature/remove-tabs
 * [new reference]         origin/feature/visual-training -> origin/feature/visual-training
 * [new reference]         origin/feature/web -> origin/feature/web
 * [new reference]         origin/features/upgrade_openpnp_capture -> origin/features/upgrade_openpnp_capture
 * [new reference]         origin/gh-pages -> origin/gh-pages
 * [new reference]         origin/master -> origin/master
 * [new reference]         origin/revert-1142-NgUI -> origin/revert-1142-NgUI
 * [new reference]         origin/revert-1169-fix/various-bugfixes-from-work -> origin/revert-1169-fix/various-bugfixes-from-work
 * [new reference]         origin/revert-1180-revert-1169-fix/various-bugfixes-from-work -> origin/revert-1180-revert-1169-fix/various-bugfixes-from-work
 * [new reference]         origin/revert-1233-develop -> origin/revert-1233-develop
 * [new reference]         origin/test -> origin/test
 * [new tag]               1.0.0 -> 1.0.0
 * [new tag]               1.1.0 -> 1.1.0
 * [new tag]               Demo_Board_v1 -> Demo_Board_v1

迁出试试
不好使,只有当前分支.

那只有列出所有分支,然后将所有分支都显式push上去。

列出本地所有分支

git branch -r

  origin/HEAD -> origin/develop
  origin/dependabot/maven/org.apache.xmlgraphics-batik-transcoder-1.17
  origin/dependabot/maven/org.python-jython-standalone-2.7.2
  origin/develop
  origin/feature/camera_arch
  origin/feature/ci
  origin/feature/nav-view
  origin/feature/package-viz
  origin/feature/placement-part-decouple
  origin/feature/remove-tabs
  origin/feature/visual-training
  origin/feature/web
  origin/features/upgrade_openpnp_capture
  origin/gh-pages
  origin/master
  origin/revert-1142-NgUI
  origin/revert-1169-fix/various-bugfixes-from-work
  origin/revert-1180-revert-1169-fix/various-bugfixes-from-work
  origin/revert-1233-develop
  origin/test

将本地分支都切换一遍(顺便建立了本地的所有分支), 让分支在本地都出现

git checkout --track origin/dependabot/maven/org.apache.xmlgraphics-batik-transcoder-1.17
git checkout --track origin/dependabot/maven/org.python-jython-standalone-2.7.2
git checkout --track origin/develop
git checkout --track origin/feature/camera_arch
git checkout --track origin/feature/ci
git checkout --track origin/feature/nav-view
git checkout --track origin/feature/package-viz
git checkout --track origin/feature/placement-part-decouple
git checkout --track origin/feature/remove-tabs
git checkout --track origin/feature/visual-training
git checkout --track origin/feature/web
git checkout --track origin/features/upgrade_openpnp_capture
git checkout --track origin/gh-pages
git checkout --track origin/master
git checkout --track origin/revert-1142-NgUI
git checkout --track origin/revert-1169-fix/various-bugfixes-from-work
git checkout --track origin/revert-1180-revert-1169-fix/various-bugfixes-from-work
git checkout --track origin/revert-1233-develop
git checkout --track origin/test

将所有东西都push进git服务端

git push -u origin --all
git push -u origin --tags

现在再重新迁出试试
在这里插入图片描述
这回可以了,问题解决。

总结

如果本地git库是全的,必须要先遍历切换到所有分支,使分支都出现在git版本拓扑图中。
然后再将所有版本和tag,push到git服务端才能重建完整的git库的服务端。

如果想要自动化重新建库, 需要自己写个脚本或程序实现。
如果自动化建库的操作不是日常任务,自己手工用dos git 命令行操作的复杂度也可以接受。

END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值