对于在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)。
SSH的缺点是它不支持匿名访问Git仓库。如果您使用SSH,人们必须对您的机器具有SSH访问权限,即使是只读权限,这也不利于SSH用于开源项目,因为人们可能只是想克隆您的存储库来检查它。如果您只在公司网络中使用SSH,SSH可能是您需要处理的唯一协议。如果您希望允许对项目的匿名只读访问,并且还希望使用SSH,则必须设置SSH以供您推送,但其他人可以从中获取其他内容。 有关详细信息,请查看参考:Git on the Server - The Protocols
9条答案
按热度按时间fdx2calv1#
我认为你在远程端创建一个裸存储库
git init --bare
,添加远程端作为本地存储库(git remote add origin URL
)的推/拉跟踪器,然后在本地你只需要说git push origin master
。现在任何其他存储库都可以从远程存储库pull
。blmhpbnm2#
为了初始设置任何Git服务器,您必须将现有的存储库导出到一个新的裸存储库中-一个不包含工作目录的存储库。这通常很容易做到。为了克隆您的存储库以创建一个新的裸存储库,您可以运行带有
--bare
选项的clone命令。按照惯例,裸仓库目录以.git
结尾,如下所示:这个命令单独获取Git仓库,没有工作目录,并专门为它创建一个目录。
现在,您已经有了存储库的裸副本,您所需要做的就是将其放在服务器上并设置协议。假设您已经设置了一个名为
git.example.com
的服务器,您可以通过SSH访问该服务器,并且您希望将所有Git存储库存储在/opt/git
目录下。您可以通过复制裸存储库来设置新存储库:此时,对
/opt/git
目录具有读访问权限的同一服务器具有SSH访问权限的其他用户可以通过运行以下命令克隆您的存储库如果用户SSHS到服务器并对
/opt/git/my_project.git
目录具有写访问权限,则他们也将自动具有推送访问权限。如果你运行git init命令并带有--shared
选项,Git会自动为仓库添加组写权限。获取一个Git仓库,创建一个裸版本,并将其放置在您和您的协作者可以SSH访问的服务器上,这非常容易。现在,您已经准备好在同一个项目上进行协作。
q9yhzks03#
上面两种流行的解决方案之间有一个有趣的区别:
1.如果您像这样创建裸存储库:
然后
然后git使用以下关系在'original_repo'中设置配置:
而后者作为上游远程。并且上游远程设备的配置中没有任何其他远程设备。
1.但是,如果你反过来做:
那么'my_remote.git'的配置中,'origin'指向'original_repo'作为远程,其中remote.origin.url等于本地目录路径,如果要将其移动到服务器,则可能不合适。
虽然“remote”引用在以后如果不合适的话很容易被删除,但“original_repo”仍然必须设置为指向“my_remote.git”作为上游远程(或者指向它将从哪里共享)。因此,从技术上讲,您可以通过方法#2的几个步骤获得相同的结果。但是#1似乎是一种更直接的方法来创建一个“中央裸共享存储库”,它起源于本地存储库,适合于移动到服务器,涉及的步骤更少。我认为这取决于你希望远程仓库扮演的角色。(是的,这与文档here冲突。
注意:我是通过在我的本地系统上使用真实的的repo进行测试来了解上述内容的(在2019年8月初撰写本文时),然后在结果之间进行逐文件比较。但是!我还在学习,所以可能有更正确的方法。但我的测试帮助我得出结论,#1是我目前首选的方法。
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)。
ev7lccsx5#
远程仓库通常是一个裸仓库-一个没有工作目录的Git仓库。因为存储库只用作协作点,所以没有理由在磁盘上 checkout 快照;这只是Git数据。用最简单的话来说,裸存储库就是项目的.git目录的内容,除此之外什么都没有。
你可以使用以下代码创建一个裸git仓库:
拥有远程git仓库的一个选项是使用SSH协议:
当自托管通过SSH时,Git的公共传输协议。这是因为在大多数地方已经设置了对服务器的SSH访问-如果没有,也很容易做到。SSH也是一种经过身份验证的网络协议,因为它无处不在,所以通常很容易设置和使用。
要通过SSH克隆一个Git仓库,你可以像这样指定一个
ssh://
URL:或者,您可以对SSH协议使用更短的类似scp的语法:
在以上两种情况下,如果您没有指定可选的用户名,Git将假定您当前登录的用户名。
支持者
使用SSH的好处有很多。首先,SSH相对容易设置- SSH守护程序很常见,许多网络管理员都有使用它们的经验,许多操作系统发行版都使用它们设置或者有管理它们的工具。其次,通过SSH的访问是安全的-所有数据传输都经过加密和身份验证。最后,与HTTPS、Git和Local协议一样,SSH是高效的,在传输数据之前使数据尽可能紧凑。
缺点
SSH的缺点是它不支持匿名访问Git仓库。如果您使用SSH,人们必须对您的机器具有SSH访问权限,即使是只读权限,这也不利于SSH用于开源项目,因为人们可能只是想克隆您的存储库来检查它。如果您只在公司网络中使用SSH,SSH可能是您需要处理的唯一协议。如果您希望允许对项目的匿名只读访问,并且还希望使用SSH,则必须设置SSH以供您推送,但其他人可以从中获取其他内容。
有关详细信息,请查看参考:Git on the Server - The Protocols
o4tp2gmn6#
在当前代码文件夹中。
然后审核人
uemypmqf7#
您需要在远程服务器上创建一个目录。然后使用“git init”命令将其设置为仓库。这应该做的每一个新的项目,你有(每个新的文件夹)
假设你已经使用ssh键设置并使用了git,我写了一个小的Python脚本,当从工作目录执行时,它将设置一个远程并将目录初始化为git仓库。当然,你必须编辑脚本(只有一次),告诉它所有仓库的服务器和根路径。
点击此处-https://github.com/skbobade/ocgi
wvyml7n58#
我有一个raspberry,我可以通过ssh通过公钥访问(不提示密码)。
在我做的乌藨子上
在我的笔记本电脑上
就这样
brjng4g39#
通常你可以使用
init
命令来设置一个git仓库在您的示例中,远程存储库上已经有一个可用的存储库。根据你访问远程仓库的方式(在url中使用用户名或处理验证的ssh密钥),只使用
clone
命令:还有其他方法可以克隆repo。如果你在你的机器上设置了ssh密钥,你就可以调用它,它会在拉取你的仓库时进行验证。如果你想在里面包含你的密码和用户名来登录到你的远程仓库,还有其他的url组合。