我有一个本地Git存储库。我想让它在远程的、启用ssh的服务器上可用。我怎么做呢?


当前回答

我有一个覆盆子,我可以通过ssh通过公钥访问(没有提示密码)。

在覆盆子上,我做到了

mkdir -p /home/pi/my/repo
cd /home/pi/my/repo
git init --bare

在我的笔记本电脑上,我做到了

git clone  ssh://pi@raspberry/home/pi/my/repo
cd myrepo
touch README.md
git add README.md
git commit -m "First commit"
git push

就是这样

其他回答

我有一个覆盆子,我可以通过ssh通过公钥访问(没有提示密码)。

在覆盆子上,我做到了

mkdir -p /home/pi/my/repo
cd /home/pi/my/repo
git init --bare

在我的笔记本电脑上,我做到了

git clone  ssh://pi@raspberry/home/pi/my/repo
cd myrepo
touch README.md
git add README.md
git commit -m "First commit"
git push

就是这样

为了最初设置任何Git服务器,您必须将现有的存储库导出到一个新的裸存储库—一个不包含工作目录的存储库。这通常很简单。为了克隆存储库以创建一个新的裸存储库,可以运行带有——bare选项的clone命令。按照惯例,裸存储库目录以.git结尾,如下所示:

$ git clone --bare my_project my_project.git
Initialized empty Git repository in /opt/projects/my_project.git/

这个命令单独获取Git存储库,没有工作目录,并单独为它创建一个目录。

现在您已经有了存储库的一个裸副本,您所需要做的就是将它放到服务器上并设置协议。假设您已经设置了一个名为git.example.com的服务器,您可以通过SSH访问该服务器,并且您希望将所有Git存储库存储在/opt/ Git目录下。你可以通过复制你的裸存储库来建立新的存储库:

$ scp -r my_project.git user@git.example.com:/opt/git

此时,对同一台服务器具有读/opt/git目录访问权限的其他用户可以通过运行命令克隆您的存储库

$ git clone user@git.example.com:/opt/git/my_project.git

如果一个用户ssh到一个服务器,并且对/opt/git/my_project有写权限。Git目录下,他们也会自动拥有推送访问权限。如果你使用——shared选项运行Git init命令,Git会自动为存储库添加组写权限。

$ ssh user@git.example.com
$ cd /opt/git/my_project.git
$ git init --bare --shared

获取Git存储库,创建一个裸版本,并将其放在您和您的合作者可以SSH访问的服务器上,这是非常容易的。现在你已经准备好在同一个项目上合作了。

通常你只需要使用init命令就可以建立一个git repo

git init

在您的情况下,已经有一个回购的远程可用。根据您如何访问远程repo (url内的用户名或处理验证的ssh密钥),只使用clone命令:

git clone git@[my.url.com]:[git-repo-name].git

还有其他方法可以克隆回购。如果您在计算机上设置了ssh密钥,在提取存储库时进行验证,则可以使用这种方法调用它。如果您希望在其中包含密码和用户名以登录到远程存储库,则该url还有其他组合。

上面两种流行的解决方案之间有一个有趣的区别:

如果你像这样创建裸库: cd / outside_of_any_repo mkdir my_remote.git cd my_remote.git Git初始化

然后

cd  /your_path/original_repo
git remote add origin /outside_of_any_repo/my_remote.git
git push --set-upstream origin master

然后git在'original_repo'中设置如下关系:

original_repo origin --> /outside_of_any_repo/my_remote.git/

后者作为上游遥控器。上游远程在其配置中没有任何其他远程。

然而,如果你反过来做: (from original_repo目录) cd . . Git克隆——bare original_repo /outside_of_any_repo/my_remote.git

然后“my_remote。Git '最终的配置是将'origin'指向'original_repo'作为一个远程,并将remote.origin.url等同于本地目录路径,如果要将其移动到服务器上,这可能不合适。

While that "remote" reference is easy to get rid of later if it isn't appropriate, 'original_repo' still has to be set up to point to 'my_remote.git' as an up-stream remote (or to wherever it is going to be shared from). So technically, you can arrive at the same result with a few more steps with approach #2. But #1 seems a more direct approach to creating a "central bare shared repo" originating from a local one, appropriate for moving to a server, with fewer steps involved. I think it depends on the role you want the remote repo to play. (And yes, this is in conflict with the documentation here.)

注意:我是在2019年8月初写这篇文章的时候,通过在我的本地系统上用一个真正的repo进行测试,然后在结果之间逐个文件进行比较,才了解到上述情况的。但是!我还在学习中,应该会有更正确的方法。但我的测试帮助我得出结论,#1是我目前首选的方法。

您需要在远程服务器上创建目录。然后使用“git init”命令将其设置为存储库。对于每个新项目(每个新文件夹)都应该这样做

假设你已经使用ssh键设置和使用了git,我写了一个小的Python脚本,当从一个工作目录执行时,它将设置一个远程目录,并将该目录初始化为一个git repo。当然,您必须编辑脚本(只有一次)来告诉它所有存储库的服务器和根路径。

点击这里查看- https://github.com/skbobade/ocgi