如何正确初始化远程Git仓库

3
我有一个在我的NAS上运行的本地git服务器,并且我在我的笔记本电脑和工作站上进行开发,所有设备都在本地网络中。所以,如果我想在一个新的空仓库中开始一个项目,我会按照这个答案的步骤:
  1. 在NAS上创建一个裸仓库"mynewproject.git" cd ${PROJECT}.git; git init --bare
  2. 在NAS上创建一个空的仓库"mynewproject" cd ${PROJECT}; git init
  3. 在"mynewproject"中做一个最初的提交 git add . ; git commit -m "initial commit" -a
  4. 将裸仓库设置为当前文件夹的远程源 git remote add origin ssh://${USER}@${REMOTEIP}${PROJECT}.git
  5. 推送到主分支 git push origin master
  6. 删除"project"目录 rm -rf $PROJECT
然后我可以从其他机器克隆${PROJECT}.git仓库。整个过程似乎过于复杂。不过,我已经写好了脚本。
HOSTIP=XXX.XXX.XXX.XXX
USER=YYYYY
PROJECT=$1

[[ -z "${PROJECT}" ]] && exit 1

PROJECTNAME=${PROJECT}
PROJECT=$(pwd)/${PROJECT}

# create project and .git folders
mkdir ${PROJECT}
mkdir ${PROJECT}.git

# initialize folders for git
cd ${PROJECT}.git
git init --bare
cd ${PROJECT}
git init

# create initial project directory
echo "#!/bin/bash" > ${PROJECT}/ENV_${PROJECTNAME}.sh
git add .
git commit -m "initial commit" -a

# 'link' to 'remote' .git folder 
git remote add origin ssh://${USER}@${HOSTIP}${PROJECT}.git

# push to master
git push origin master

# delete 'project' directory
rm -rf $PROJECT

echo "CREATED PROJECT $PROJECT.git"
echo "Clone with git clone ssh://${USER}@${HOSTIP}${PROJECT}"

exit 0

但是,这样做是正确的方式吗?


1
我有点困惑。你为什么要同时创建一个新的裸仓库和一个普通仓库? - evolutionxbox
1
在我看来,第二个非裸仓库是不必要的。 - evolutionxbox
我认为在同一台机器上链接存储库时不需要ssh连接。 - evolutionxbox
@evolutionxbox 需要通过SSH连接才能从其他机器连接到NAS上的远程裸库。 - phd
是的,它在NAS上运行。但我认为需要定义Git协议,对吗? - mrburnst
显示剩余2条评论
1个回答

4

您的流程基本上是正确的,但有点过于复杂。您不需要在NAS上使用非裸库,因此您的工作流程应该是:

  1. 在NAS上创建一个裸库:cd ${PROJECT}.git; git init --bare
  2. 在另一台机器上克隆${PROJECT}.git仓库。这会将远程添加到非裸库中。
  3. 您可以在另一台机器上创建一个空的非裸库并添加远程代替克隆:cd ${PROJECT}; git init; git remote add origin ssh://${USER}@${HOSTIP}${PROJECT}.git
  4. 在另一台机器上的克隆非裸库中进行初始提交:git add . ; git commit -m "initial commit" -a
  5. 将来自另一台机器的主分支推送到NAS上的裸库:git push origin master

谢谢,是的,实际上有点过于复杂了。不过我还是会保持这样的方式,因为这样我就可以从任何其他机器上检出仓库并开始工作了。否则,我以后还得添加远程源。 - mrburnst

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接