文章目录
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://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 命令行操作的复杂度也可以接受。