我正在使用gitea
VPS ♣上的测试设置,遇到了可能是同样的问题。在进行了各种测试之后,我发现了一个对我有用的解决方法。如果它可以帮助你...
什么已经在起作用
就我而言,要求gitea
创建一个git
带有初始“自述文件提交”的新存储库工作正常。我可以clone
,添加新的提交,并且push
. 新提交出现在gitea
Web UI 中的第一个提交之后。
什么不工作
如果我要求gitea
在没有初始提交的情况下创建存储库†,gitea
则 Web UI 将不会反映提交历史的推送,即
user@client:~/projects$ mkdir myCode
user@client:~/projects$ cd myCode
user@client:~/projects/myCode$ git init
Initialized empty Git repository in /home/user/projects/myCode/.git/
user@client:~/projects/myCode$ echo "testing 1 2 3" > file.txt
user@client:~/projects/myCode$ git add file.txt
user@client:~/projects/myCode$ git commit -m0
[master (root-commit) f9d8e7] 0
1 file changed, 1 insertion(+)
create mode 100644 file.txt
user@client:~/projects/myCode$ git remote add origin git@server:gitea_repos/owner/myCode.git
user@client:~/projects/myCode$ git push -u origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 210 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@server:gitea_repos/owner/myCode.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin.
user@client:~/projects/myCode$
git
将报告成功并git@server:gitea_repos/owner/myCode.git
继续作为远程设备运行,但gitea
Web UI 将继续显示“空存储库”帮助页面,而不是存储库浏览器‡。
变通策略
因为新的提交是在开始非空的存储库上注册的,所以我想到如果用另一个项目的完整提交历史覆盖新项目的存根提交历史gitea
可能会注意到更改↯。要尝试此操作,请执行以下操作:git
3个简单的步骤:
- 在
gitea
Web UI 中,创建一个新的存储库。在New Repository
创建页面上,请务必选中旁边的框,Initialize this repository with selected files and template
然后单击Create Repository
。
在您的工作站上,将此新存根添加为具有所需提交历史记录remote
的本地存储库。git
user@client:~$ cd projects/myCode
user@client:~/projects/myCode$ git remote add gitea git@server:gitea_repos/owner/myCode.git
gitea
用预期的材料覆盖-generated stub-commit。
user@client:~/projects/myCode$ git push -fu gitea master
Counting objects: 97, done.
Delta compression using up to 32 threads.
Compressing objects: 100% (95/95), done.
Writing objects: 100% (97/97), 55.53 KiB | 0 bytes/s, done.
Total 97 (delta 45), reused 0 (delta 0)
To git@server:gitea_repos/owner/myCode.git
+ a1b2c3...d4e5f6 master -> master (forced update)
Branch master set up to track remote branch master from gitea.
user@client:~/projects/myCode$
请注意,对于第 3 步:
-f
是为了强制:这git
可以执行(否则禁止)“提交树覆盖”
-u
用于设置上游master
- 这通过远程跟踪分支将本地分支连接gitea/master
到由管理的主分支gitea
跟进
这个策略有点像黑客,我怀疑它会留下一些未完成的事情。例如,您可能希望将分支和标签推到gitea
. (我的测试还没有让我走这么远。)考虑--all
分支和--tags
标签:
user@client:~/projects/myCode$ git push gitea --all
user@client:~/projects/myCode$ git push gitea --tags
趁着YMMV,祝你好运!
脚注:
♣ - 我正在与托管gitea-1.4.2-linux-amd64
在.Ubuntu 16.04.2 LTS
virmach.com
† -git
在指代没有提交的存储库时使用术语“空存储库”,但在用于gitea
访问git
功能的内部 API(以及偶尔由gitea
社区成员使用)中,使用术语“裸存储库” ☥。
☥ -git
当指代未嵌入(作为目录./.git
)在“工作树”的根目录中的存储库时,使用术语“裸存储库”。裸存储库经常用作协作的规范副本,并存储在服务器上(并可从服务器访问)。例如“github”服务。有时这些目录以架构命名project_name.git
‡ - 我尝试了许多设置变体,在irc
channel上四处询问#gitea
,并在代码中四处寻找。我所能得出的结论是,git
→hooks→gitea
链中的一些差异(在空存储库和非空存储库之间变化)是导致我的 VPS 上出现此问题的原因。
↯ - 在此之前,我曾想过在新的存根上重放所需项目的历史,但这个rebase
操作是一个绝望的黑客:所有提交都会得到新的sha
校验和,基本上,所有开发人员都必须再次克隆,就像在工作一样一个新的存储库。