如何从本地创建一个远程Git存储库?

时间:2011-07-11 10:50:33

标签: git installation

我有一个本地Git存储库。我想在远程的,支持ssh的服务器上使用它。我该怎么做?

8 个答案:

答案 0 :(得分:245)

我认为您在远程端git init --bare创建了一个裸存储库,将远程端添加为本地存储库的推/拉跟踪器(git remote add origin URL),然后在本地您只需说{ {1}}。现在任何其他存储库都可以从远程存储库git push origin master

答案 1 :(得分:65)

为了初始设置任何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目录具有读访问权限的同一服务器具有SSH访问权限的其他用户可以通过运行

来克隆您的存储库
$ 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的服务器上非常容易。现在,您已准备好在同一个项目上进行协作。

答案 2 :(得分:8)

为在Windows上创建本地副本并希望在Unix系统上创建相应远程存储库的人员的注释,其中文本文件在类Unix系统上由开发人员在其他克隆上获得LF结尾,但CRLF结尾于视窗。

如果您在setting up line-ending translation之前创建了Windows资源库,则表示您遇到了问题。 Git的默认设置是无翻译,因此您的工作集使用CRLF但您的存储库(即存储在.git下的数据)也将文件保存为CRLF。

当您按下遥控器时,保存的文件按原样复制,不会发生行结束转换。 (当文件提交到存储库时,不会在推送存储库时发生行结束转换)。你最终会在类Unix的存储库中使用CRLF,这不是你想要的。

要在远程存储库中获取LF,您必须首先确保LF位于本地存储库中,re-normalizing your Windows repository。这对您的Windows工作集没有明显影响,它仍然具有CRLF结尾,但是当您推送到远程时,遥控器将正确获得LF。

我不确定是否有一种简单的方法可以告诉你在Windows资源库中有哪些行结尾 - 我想你可以通过设置core.autocrlf = false然后克隆来测试它(如果repo有LF结尾,那么克隆也会有LF。)

答案 3 :(得分:4)

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

  1. 如果您这样创建裸仓库:

    cd     /outside_of_any_repo
    mkdir  my_remote.git
    cd     my_remote.git
    git init --bare
    

然后

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/

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

  1. 但是,如果您反过来这样做:

    (from in directory original_repo)
    cd ..
    git clone --bare original_repo  /outside_of_any_repo/my_remote.git
    

然后,“ my_remote.git”的配置结束时,“ origin”指向“ original_repo”作为远程,remote.origin.url等于本地目录路径,如果要使用,则可能不合适移到服务器上。

尽管“远程”引用很容易在以后被删除(如果不合适),但仍必须将“ original_repo”设置为指向“ my_remote.git”作为上游远程对象(或指向任何地方的远程对象)它将从中共享)。因此,从技术上讲,使用方法2,您可以通过几个步骤来获得相同的结果。但是,#1似乎是一种更直接的方法来创建“中央裸共享仓库”,该仓库源于本地服务器,适合于迁移到服务器,涉及的步骤更少。我认为这取决于您希望远程回购发挥的作用。 (是的,这与文档here冲突。)

注意事项:通过在本地系统上使用真实仓库进行测试,然后在结果之间进行逐个文件比较,我了解了以上内容(于2019年8月上旬撰写本文)。但!我仍在学习,因此可能会有更正确的方法。但是我的测试帮助我得出结论,认为#1是我目前首选的方法。

答案 4 :(得分:2)

您需要在远程服务器上创建目录。然后使用" git init"命令将其设置为存储库。这应该为您拥有的每个新项目(每个新文件夹)

完成

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

点击此处 - https://github.com/skbobade/ocgi

答案 5 :(得分:2)

  

远程存储库通常是一个裸存储库 - 一个Git存储库   没有工作目录。因为存储库仅用作   一个协作点,没有理由检查快照   在磁盘上;它只是Git数据。简单来说,一个裸露的   repository是项目的.git目录的内容   没别的。

您可以使用以下代码创建一个简单的git存储库:

$ git clone --bare /path/to/project project.git

拥有远程git存储库的一个选择是使用SSH协议:

  

自托管通过SSH时Git的常用传输协议。   这是因为大多数情况下已经设置了对服务器的SSH访问   地方 - 如果不是,那就很容易做到。 SSH也是一个   经过身份验证的网络协议,因为它无处不在,所以它是   通常易于设置和使用。

     

要通过SSH克隆Git存储库,您可以指定ssh:// URL   像这样:

$ git clone ssh://[user@]server/project.git
     

或者您可以使用较短的类似scp的SSH协议语法:

$ git clone [user@]server:project.git
     

在上述两种情况下,如果您没有指定可选的用户名,请使用Git   假定您当前登录的用户为。

     

专业人士

     

使用SSH的优点很多。首先,SSH相对容易设置   up - SSH守护进程很常见,很多网络管理员都有经验   与他们一起,许多操作系统发行版都与他们建立或拥有   管理它们的工具。接下来,通过SSH访问是安全的 - 所有数据   传输已加密并经过身份验证。最后,像HTTPS,Git和   本地协议,SSH是高效的,使数据紧凑   在转移之前可能。

     

缺点

     

SSH的负面影响是它不支持匿名访问   到你的Git存储库。如果您使用的是SSH,那么人们必须拥有SSH   访问您的机器,即使是只读容量,也没有   使SSH有利于人们可能的开源项目   只是想克隆你的存储库来检查它。如果你正在使用它   只有在企业网络中,SSH可能是您唯一的协议   需要处理。如果要允许匿名只读访问   你的项目,也想使用SSH,你必须设置SSH   你要推翻其他东西以供其他人取得。

有关更多信息,请查看参考: Git on the Server - The Protocols

答案 6 :(得分:0)

在当前代码文件夹中。

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

然后审核

git remote --v

答案 7 :(得分:-4)

通常只需使用init命令

即可设置git repo
git init

在您的情况下,遥控器上已有一个回购。根据您访问远程仓库的方式(使用url中的用户名或处理验证的ssh密钥),只使用clone命令:

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

还有其他方法来克隆回购。这样,如果您的计算机上有ssh密钥设置,则可以调用它来验证是否已提取存储库。如果您想在内部包含密码和用户名以登录远程存储库,则还有url的其他组合。