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


当前回答

在当前代码文件夹中。

git remote add origin http://yourdomain-of-git.com/project.git
git push --set-upstream origin master

然后通过

git remote --v

其他回答

我认为你在远程端创建一个裸库,git init——bare,添加远程端作为本地存储库的推/拉跟踪器(git remote add origin URL),然后在本地输入git push origin master。现在任何其他存储库都可以从远程存储库中提取。

在当前代码文件夹中。

git remote add origin http://yourdomain-of-git.com/project.git
git push --set-upstream origin master

然后通过

git remote --v

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

git init

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

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

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

对于在Windows上创建本地副本并希望在unix行系统上创建相应远程存储库的人来说,这里的文本文件在类unix系统上的开发人员进一步克隆时得到LF结尾,但在Windows上得到CRLF结尾。

如果你在设置行尾转换之前创建了Windows存储库,那么你就有问题了。Git的默认设置是不翻译,所以您的工作集使用CRLF,但您的存储库(即存储在. Git下的数据)也将文件保存为CRLF。

当您推到远程时,保存的文件将按原样复制,不会发生行尾转换。(行尾转换发生在文件提交到存储库时,而不是推送存储库时)。您最终会在类unix存储库中使用CRLF,这不是您想要的。

为了在远程存储库中获得LF,您必须首先通过重新规范化您的Windows存储库来确保LF在本地存储库中。这将对您的Windows工作集没有明显的影响,它仍然有CRLF结束,但是当您推到远程时,远程将正确地获得LF。

我不确定是否有一种简单的方法来告诉你在你的Windows存储库中有什么行尾-我猜你可以通过设置core来测试它。selflf =false,然后克隆(如果回购有LF结尾,克隆也会有LF结尾)。

为了最初设置任何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访问的服务器上,这是非常容易的。现在你已经准备好在同一个项目上合作了。