git 将代码从没有权限的仓库推送到私有仓库?

jjjwad0x  于 2022-12-02  发布在  Git
关注(0)|答案(1)|浏览(156)

我有一个来自外部存储库的文件夹(我们称之为ExRepo),我没有任何推送权限。
如何获取ExRepo并将其合并到MyOwnRepo中?
我试过这个:

C:/Users/<User>/MyOwnRepo>git checkout -b ExRepo
C:/Users/<User>/MyOwnRepo>git clone git@ExRepo.git
C:/Users/<User>/MyOwnRepo>git remote add -f ExRepo git@MyOwnRepo.git
C:/Users/<User>/MyOwnRepo>git push

这实际上并没有改变任何东西。很可能是因为ExRepo是另一个存储库(MyOwnRepo)中的它自己的存储库。那么,我究竟如何将ExRepo中的所有内容都添加到MyOwnRepo中呢?如果我试图将文件夹ExRepo添加到我的远程存储库中,并使用MyOwnRepo的URL,我会收到以下消息:

hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint:
hint:   git submodule add <url> lab3
hint:
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint:
hint:   git rm --cached lab3
hint:
hint: See "git help submodule" for more information.

但是,如果我把ExRepo当作一个子模块,我仍然不能编辑它。推入子模块不会给予我一个ExRepo文件夹到MyOwnRepo,只是一个链接到原始的ExRepo,我没有任何权限。所以,这里显然有一些东西我错过了。

yrwegjxp

yrwegjxp1#

你需要做的是有一个连接到两个存储库的沙箱,而不是嵌套沙箱。你可以从任何一个存储库中提取,但只能推送到你有写访问权限的那个。
假设只读存储库是git@server:exspace/exrepo.git,读写存储库是git@server:newspace/myownrepo.git。这个过程应该对你有用。不要在现有的沙箱中运行这个过程,或者如果你已经有一个exrepo的克隆,就跳过克隆部分。

git clone git@server:exspace/exrepo.git myrepo
cd myrepo
git remote add myownremote git@server:newspace/myownrepo.git

现在,要将某个分支branchname从exrepo推送到myownremote,可以检查并推送它:

git checkout branchname
git push myownremote branchname

如果你想让你的生活更轻松,并有自己的回购作为默认,设置为上游:

git push -u myownremote branchname

在以后的每次推送/拉入/获取操作中,您可以指定要使用哪个远程:originmyownremote

相关问题