如何添加本地存储库并将其视为远程存储库

问题描述 投票:0回答:5

我正在尝试使本地存储库充当我的 PC 上另一个本地存储库的名称为

bak
的远程存储库,使用以下命令:

git remote add /home/sas/dev/apps/smx/repo/bak/ontologybackend/.git bak

这给出了这个错误:

fatal: '/home/sas/dev/apps/smx/repo/bak/ontologybackend/.git' is not a valid remote name

我正在尝试同步两个本地存储库,其中一个配置为另一个名为

bak
的远程存储库,然后发出
git pull bak

最好的方法是什么?

git git-remote
5个回答
410
投票

您对

remote add
命令的参数颠倒了:

git remote add <NAME> <PATH>

所以:

git remote add bak /home/sas/dev/apps/smx/repo/bak/ontologybackend/.git

请参阅

git remote --help
了解更多信息。


247
投票

如果您的目标是保留存储库的本地副本以便于备份或粘贴到外部驱动器或通过云存储(Dropbox 等)共享,您可能需要使用裸存储库。这允许您在没有工作目录的情况下创建存储库的副本,并针对共享进行了优化。

例如:

$ git init --bare ~/repos/myproject.git
$ cd /path/to/existing/repo
$ git remote add origin ~/repos/myproject.git
$ git push origin master

同样,您可以像远程仓库一样进行克隆:

$ git clone ~/repos/myproject.git

16
投票

我发布这个答案是为了提供一个带有解释的脚本,该脚本涵盖了创建具有本地远程的本地存储库的三种不同场景。您可以运行整个脚本,它将在您的主文件夹中创建测试存储库(在 Windows git bash 上测试)。解释位于脚本内,以便更轻松地保存到您的个人笔记中,它非常易于阅读,例如Visual Studio 代码。

我还要感谢Jack链接到这个答案,其中adelphus对这个主题有很好的、详细的、实际的解释。

这是我在这里的第一篇文章,所以请告知应该改进的地方。

## SETUP LOCAL GIT REPO WITH A LOCAL REMOTE
# the main elements:
# - remote repo must be initialized with --bare parameter
# - local repo must be initialized
# - local repo must have at least one commit that properly initializes a branch(root of the commit tree)
# - local repo needs to have a remote
# - local repo branch must have an upstream branch on the remote

{ # the brackets are optional, they allow to copy paste into terminal and run entire thing without interruptions, run without them to see which cmd outputs what

cd ~
rm -rf ~/test_git_local_repo/

## Option A - clean slate - you have nothing yet

mkdir -p ~/test_git_local_repo/option_a ; cd ~/test_git_local_repo/option_a
git init --bare local_remote.git # first setup the local remote
git clone local_remote.git local_repo # creates a local repo in dir local_repo
cd ~/test_git_local_repo/option_a/local_repo
git remote -v show origin # see that git clone has configured the tracking
touch README.md ; git add . ; git commit -m "initial commit on master" # properly init master
git push origin master # now have a fully functional setup, -u not needed, git clone does this for you

# check all is set-up correctly
git pull # check you can pull
git branch -avv # see local branches and their respective remote upstream branches with the initial commit
git remote -v show origin # see all branches are set to pull and push to remote
git log --oneline --graph --decorate --all # see all commits and branches tips point to the same commits for both local and remote

## Option B - you already have a local git repo and you want to connect it to a local remote

mkdir -p ~/test_git_local_repo/option_b ; cd ~/test_git_local_repo/option_b
git init --bare local_remote.git # first setup the local remote

# simulate a pre-existing git local repo you want to connect with the local remote
mkdir local_repo ; cd local_repo
git init # if not yet a git repo
touch README.md ; git add . ; git commit -m "initial commit on master" # properly init master
git checkout -b develop ; touch fileB ; git add . ; git commit -m "add fileB on develop" # create develop and fake change

# connect with local remote
cd ~/test_git_local_repo/option_b/local_repo
git remote add origin ~/test_git_local_repo/option_b/local_remote.git
git remote -v show origin # at this point you can see that there is no the tracking configured (unlike with git clone), so you need to push with -u
git push -u origin master # -u to set upstream
git push -u origin develop # -u to set upstream; need to run this for every other branch you already have in the project

# check all is set-up correctly
git pull # check you can pull
git branch -avv # see local branch(es) and its remote upstream with the initial commit
git remote -v show origin # see all remote branches are set to pull and push to remote
git log --oneline --graph --decorate --all # see all commits and branches tips point to the same commits for both local and remote

## Option C - you already have a directory with some files and you want it to be a git repo with a local remote

mkdir -p ~/test_git_local_repo/option_c ; cd ~/test_git_local_repo/option_c
git init --bare local_remote.git # first setup the local remote

# simulate a pre-existing directory with some files
mkdir local_repo ; cd local_repo ; touch README.md fileB

# make a pre-existing directory a git repo and connect it with local remote
cd ~/test_git_local_repo/option_c/local_repo
git init
git add . ; git commit -m "inital commit on master" # properly init master
git remote add origin ~/test_git_local_repo/option_c/local_remote.git
git remote -v show origin # see there is no the tracking configured (unlike with git clone), so you need to push with -u
git push -u origin master # -u to set upstream

# check all is set-up correctly
git pull # check you can pull
git branch -avv # see local branch and its remote upstream with the initial commit
git remote -v show origin # see all remote branches are set to pull and push to remote
git log --oneline --graph --decorate --all # see all commits and branches tips point to the same commits for both local and remote
}


5
投票

您的格式似乎不正确:

如果您想共享本地创建的存储库,或者您想从其他人的存储库中获取贡献 - 如果您愿意 以任何方式与新存储库进行交互,通常最容易 将其添加为遥控器。您可以通过运行 git remote add [alias] 来完成此操作 [网址]。这会在名为 [alias] 的本地远程目录下添加 [url]。

#example
$ git remote
$ git remote add github [email protected]:schacon/hw.git
$ git remote -v

http://gitref.org/remotes/#remote


0
投票

您收到的错误消息表明 /home/sas/dev/apps/smx/repo/bak/ontologybackend/.git 文件不是有效的 Git 远程名称。由于 bak 不是标准的 Git 远程名称,因此它可能无法按预期工作。

要解决此问题,请按照以下步骤操作:

在本地本体后端存储库上创建一个名为 origin 的新远程。

git远程添加origin /home/sas/dev/apps/smx/repo/ontologybackend/.git 将您的 bak 本地存储库添加为名为 bak 的新远程。

git远程添加bak /home/sas/dev/apps/smx/repo/bak/ontologybackend/.git 使用 git Remote -v 检查远程名称。

现在您可以使用 .bakgit pull origin master 来同步本体后端和 bak 远程存储库。

通过执行这些步骤,您将能够将本地 Git 存储库设置为具有自定义名称的远程存储库,然后执行 Git 操作,例如在两个存储库之间拉和推。

如果您需要更改本地存储库的默认远程名称 origin,可以使用 --remote 选项,如下所示:

git 远程 set-url origin /home/sas/dev/apps/smx/repo/ontologybackend/.git 这会将 origin 远程设置为使用 bak 而不是 origin。然后,您可以像以前一样添加一个名为 origin 的新远程,并且可以像以前一样使用 .bakgit pull origin master 。

© www.soinside.com 2019 - 2024. All rights reserved.