如何添加本地回购,并将其视为远程回购

我试图使一个本地回购作为一个名为bak的远程在我的PC上的另一个本地回购,使用如下:

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 remote add bak /home/sas/dev/apps/smx/repo/bak/ontologybackend/.git

遥控器的名字是之前地址。

224909 次浏览

remote add命令的参数颠倒了:

git remote add <NAME> <PATH>

所以:

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

更多信息请参见git remote --help

看起来你的格式是不正确的:

如果你想共享一个本地创建的存储库,或者你想从其他人的存储库中获得贡献-如果你想要的话 以任何方式与新存储库交互,通常最容易 将其添加为遥控器。你可以通过运行git remote add [alias]来实现。 [url]。将[url]添加到一个名为[alias]的本地远程地址下

#example
$ git remote
$ git remote add github git@github.com:schacon/hw.git
$ git remote -v

< a href = " http://gitref.org/remotes/远程" > http://gitref.org/remotes/远程< / >

如果你的目标是保存存储库的本地副本以方便备份,或保留到外部驱动器或通过云存储(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

我发布这个答案是为了提供一个脚本,其中解释了创建具有本地远程的本地回购的三种不同场景。您可以运行整个脚本,它将在您的主文件夹中创建测试repo(在windows git bash上测试)。解释是在脚本中,更容易保存到你的个人笔记,它非常可读,从,例如Visual Studio代码。

我还要感谢杰克提供了这个答案的链接,其中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
}