1

我在树莓派上安装了 gitea(如果有人不知道,它是 gogs 的开源分支)。我在用户 pi 和用户 git 下尝试过。在用户 pi 中,gitea 安装/home/pi/gitea在 git 中,它安装在/home/git. 在这两种情况下,存储库目录都位于安装根目录中。

我用 webui 创建了一个新的存储库,并尝试了 2 个安装的遥控器。

rpilocal = pi@192.168.1.125:/home/pi/gitea/repositories/uname/repositoryname
rpilocal2 = pi@192.168.1.125:uname/repositoryname
rpigitlocal = git@192.168.1.125:/home/pi/gitea/repositories/uname/repositoryname
rpigitlocal2 = git@192.168.1.125:uname/repositoryname/repositoryname

当我试图继续前进时rpilocal2rpigitlocal2我收到以下错误消息:

git push rpigitlocal2 master
git@192.168.1.125's password: 
fatal: 'feralheart/leltar.git' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

当我尝试推送rpilocal并且rpigitlocal推送成功时,但是在网络界面中我仍然得到“使用 CLI 创建新存储库或推送现有存储库”。

怎么了?

4

1 回答 1

0

我正在使用giteaVPS 上的测试设置,遇到了可能是同样的问题。在进行了各种测试之后,我发现了一个对我有用的解决方法。如果它可以帮助...

什么已经在起作用

就我而言,要求gitea创建一个git带有初始“自述文件提交”的新存储库工作正常。我可以clone,添加新的提交,并且push. 新提交出现在giteaWeb 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继续作为远程设备运行,但giteaWeb UI 将继续显示“空存储库”帮助页面,而不是存储库浏览器

变通策略

因为新的提交是在开始非空的存储库上注册的,所以我想到如果用另一个项目的完整提交历史覆盖新项目的存根提交历史gitea可能会注意到更改。要尝试此操作,请执行以下操作:git

3个简单的步骤:

  1. giteaWeb UI 中,创建一个新的存储库。在New Repository创建页面上,请务必选中旁边的框,Initialize this repository with selected files and template然后单击Create Repository
  2. 在您的工作站上,将此新存根添加为具有所需提交历史记录remote的本地存储库。git

    user@client:~$ cd projects/myCode
    user@client:~/projects/myCode$ git remote add gitea git@server:gitea_repos/owner/myCode.git
    
  3. 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 LTSvirmach.com

-git在指代没有提交的存储库时使用术语“空存储库”,但在用于gitea访问git功能的内部 API(以及偶尔由gitea社区成员使用)中,使用术语“裸存储库”

-git当指代嵌入(作为目录./.git)在“工作树”的根目录中的存储库时,使用术语“裸存储库”。裸存储库经常用作协作的规范副本,并存储在服务器上(并可从服务器访问)。例如“github”服务。有时这些目录以架构命名project_name.git

- 我尝试了许多设置变体,在ircchannel上四处询问#gitea,并在代码中四处寻找。我所能得出的结论是,git→hooks→gitea链中的一些差异(在空存储库和非空存储库之间变化)是导致我的 VPS 上出现此问题的原因。

- 在此之前,我曾想过在新的存根上重放所需项目的历史,但这个rebase操作是一个绝望的黑客:所有提交都会得到新的sha校验和,基本上,所有开发人员都必须再次克隆,就像在工作一样一个新的存储库。

于 2018-06-14T09:16:14.000 回答