如何从本地仓库创建远程Git仓库?

px9o7tmv  于 2023-05-05  发布在  Git
关注(0)|答案(9)|浏览(246)

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

fdx2calv

fdx2calv1#

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

blmhpbnm

blmhpbnm2#

为了初始设置任何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

如果用户SSHS到服务器并对/opt/git/my_project.git目录具有写访问权限,则他们也将自动具有推送访问权限。如果你运行git init命令并带有--shared选项,Git会自动为仓库添加组写权限。

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

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

q9yhzks0

q9yhzks03#

上面两种流行的解决方案之间有一个有趣的区别:
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等于本地目录路径,如果要将其移动到服务器,则可能不合适。
虽然“remote”引用在以后如果不合适的话很容易被删除,但“original_repo”仍然必须设置为指向“my_remote.git”作为上游远程(或者指向它将从哪里共享)。因此,从技术上讲,您可以通过方法#2的几个步骤获得相同的结果。但是#1似乎是一种更直接的方法来创建一个“中央裸共享存储库”,它起源于本地存储库,适合于移动到服务器,涉及的步骤更少。我认为这取决于你希望远程仓库扮演的角色。(是的,这与文档here冲突。
注意:我是通过在我的本地系统上使用真实的的repo进行测试来了解上述内容的(在2019年8月初撰写本文时),然后在结果之间进行逐文件比较。但是!我还在学习,所以可能有更正确的方法。但我的测试帮助我得出结论,#1是我目前首选的方法。

pftdvrlh

pftdvrlh4#

对于在Windows上创建本地副本并希望在Unix系统上创建相应的远程存储库的人,其中文本文件在类似Unix系统的开发人员的进一步克隆中获得LF结尾,但在Windows上获得CRLF结尾。
如果您在setting up line-ending translation之前创建了Windows存储库,则会出现问题。Git的默认设置是不翻译,所以你的工作集使用CRLF,但是你的仓库(即数据存储在.git下)也将文件保存为CRLF。
当您推到远程时,保存的文件按原样复制,不会发生行尾转换。(行结束转换发生在文件提交到存储库时,而不是推送存储库时)。你最终在你的类Unix存储库中得到CRLF,这不是你想要的。
要在远程存储库中获取LF,您必须首先通过re-normalizing your Windows repository确保LF在本地存储库中。这对你的Windows工作集没有明显的影响,它仍然有CRLF结尾,但是当你推到远程时,远程将正确地获得LF。
我不确定是否有一种简单的方法来告诉你的Windows存储库中有什么行结尾-我想你可以通过设置core.autocrlf=false然后克隆来测试它(如果存储库有LF结尾,克隆也会有LF)。

ev7lccsx

ev7lccsx5#

远程仓库通常是一个裸仓库-一个没有工作目录的Git仓库。因为存储库只用作协作点,所以没有理由在磁盘上 checkout 快照;这只是Git数据。用最简单的话来说,裸存储库就是项目的.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

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

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

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

支持者

使用SSH的好处有很多。首先,SSH相对容易设置- SSH守护程序很常见,许多网络管理员都有使用它们的经验,许多操作系统发行版都使用它们设置或者有管理它们的工具。其次,通过SSH的访问是安全的-所有数据传输都经过加密和身份验证。最后,与HTTPS、Git和Local协议一样,SSH是高效的,在传输数据之前使数据尽可能紧凑。

缺点

SSH的缺点是它不支持匿名访问Git仓库。如果您使用SSH,人们必须对您的机器具有SSH访问权限,即使是只读权限,这也不利于SSH用于开源项目,因为人们可能只是想克隆您的存储库来检查它。如果您只在公司网络中使用SSH,SSH可能是您需要处理的唯一协议。如果您希望允许对项目的匿名只读访问,并且还希望使用SSH,则必须设置SSH以供您推送,但其他人可以从中获取其他内容。
有关详细信息,请查看参考:Git on the Server - The Protocols

o4tp2gmn

o4tp2gmn6#

在当前代码文件夹中。

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

然后审核人

git remote --v
uemypmqf

uemypmqf7#

您需要在远程服务器上创建一个目录。然后使用“git init”命令将其设置为仓库。这应该做的每一个新的项目,你有(每个新的文件夹)
假设你已经使用ssh键设置并使用了git,我写了一个小的Python脚本,当从工作目录执行时,它将设置一个远程并将目录初始化为git仓库。当然,你必须编辑脚本(只有一次),告诉它所有仓库的服务器和根路径。
点击此处-https://github.com/skbobade/ocgi

wvyml7n5

wvyml7n58#

我有一个raspberry,我可以通过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

就这样

brjng4g3

brjng4g39#

通常你可以使用init命令来设置一个git仓库

git init

在您的示例中,远程存储库上已经有一个可用的存储库。根据你访问远程仓库的方式(在url中使用用户名或处理验证的ssh密钥),只使用clone命令:

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

还有其他方法可以克隆repo。如果你在你的机器上设置了ssh密钥,你就可以调用它,它会在拉取你的仓库时进行验证。如果你想在里面包含你的密码和用户名来登录到你的远程仓库,还有其他的url组合。

相关问题