ローカルリポジトリを追加してリモートリポジトリとして扱う方法


234

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

私は2つのローカルリポジトリを同期しようとしています。bak一方はもう一方の名前が付けられたリモートとして構成され、それからを発行していgit pull bakます。

それを行う最良の方法は何ですか?


編集:

申し訳ありませんが、ばかげた私は、リモート追加が次のようになるはずだと気づきました:

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

リモートの名前はアドレスのに表示されます。

回答:


273

remote addコマンドへの引数が逆になっています:

git remote add <NAME> <PATH>

そう:

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

詳細についてはgit remote --help、を参照してください。


6
.git、具体的けれども必要な終わり?
Erik Aigner

5
それは単なるパスです... Gitはそれが何と呼ばれるかを気にしません。
larsks 2016

2
@ErikAignerは伝統的に、裸のリポジトリは「.git」サフィックスで終わります。通常は独自のディレクトリではなく、「/ path / to / projectname.git」のようになります。-それ以外はほとんど違いはありません。
Atli 2017

7
絶対パスを使用する必要があるようですが、これは私には自明ではありませんでした。相対パスで試したところ、になりましたfatal: '../dir' does not appear to be a git repository
キースレイン2018年

1
file://クライアントソフトウェアが予期されるプロトコルを介してアクセスできるように、パスの前に配置し、ローカルリポジトリへのフルパスを使用することが重要です。そして、上記のエリックの質問に答えて.git、パスの終わりに明らかに必要です。
Scott Lahteine

158

リポジトリのローカルコピーを保持して簡単にバックアップしたり、外部ドライブに固定したり、クラウドストレージ(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

9
これは、「それへの最良の方法は何ですか?」という質問に完全に適合するので、受け入れられた答えになるはずです。@opensasが言うように、「リモートリポジトリとして扱われるローカルリポジトリ」は、実際には(実際のリモートリポジトリと同様に)ベアディレクトリです
Jack '

1
私は編集をお勧め:かどうかは、あなたが使用する必要があります「gitのremotのアドオンを..」+「gitのプッシュ」または単に「gitのクローンは」ここに示されます。stackoverflow.com/a/31590993/5446285(アデルフスと答え)
ジャック

1
@ジャック-混乱していると思われる点について詳しく教えてください。私は修正してうれしいですが、答えを比較的簡潔に保ちたいです。
マットサンダース

6

形式が正しくないようです:

ローカルに作成されたリポジトリを共有したい場合、または他の誰かのリポジトリから貢献したい場合-何らかの方法で新しいリポジトリとやり取りしたい場合は、通常、それをリモートとして追加するのが最も簡単です。そのためには、git remote add [alias] [url]を実行します。[エイリアス]という名前のローカルリモートの下に[URL]が追加されます。

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

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


0

この回答を投稿して、ローカルリモートを持つローカルリポジトリを作成する3つの異なるシナリオを説明するスクリプトを提供します。スクリプト全体を実行すると、ホームフォルダーにテストリポジトリが作成されます(Windows git bashでテスト済み)。説明はスクリプト内にあり、個人のメモに簡単に保存できます。たとえば、Visual Studio Codeなどから非常に読みやすくなっています。

また、このトピックにadelphusが適切で詳細な実践的な説明を提供しているこの回答にリンクしてくれたJackにも感謝します。

これは私の最初の投稿なので、改善すべき点を教えてください。

## 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
}

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.