我有一个本地Git存储库。我想在远程的,支持ssh的服务器上使用它。我该怎么做?
答案 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)
上面两种流行的解决方案之间有一个有趣的区别:
如果您这样创建裸仓库:
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/
,后者作为上游遥控器。而且上游远程配置中没有任何其他远程。
但是,如果您反过来这样做:
(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。当然,您必须编辑脚本(仅一次)来告诉它所有存储库的服务器和根路径。
答案 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 init
在您的情况下,遥控器上已有一个回购。根据您访问远程仓库的方式(使用url中的用户名或处理验证的ssh密钥),只使用clone
命令:
git clone git@[my.url.com]:[git-repo-name].git
还有其他方法来克隆回购。这样,如果您的计算机上有ssh密钥设置,则可以调用它来验证是否已提取存储库。如果您想在内部包含密码和用户名以登录远程存储库,则还有url的其他组合。