本地电脑代码通过git同步到服务器上方法
在开发和研究过程中,您可能需要将本地已有的 Git 仓库复制到远程服务器上,并通过 Git 来保持二者的同步。本文将介绍如何将本地 Git 仓库复制到远程服务器,并允许推送更改到检出的分支。
一:本地已有 Git 仓库
首先,确保您在本地已经有一个 Git 仓库。如果还没有,您可以使用以下命令初始化:
cd /path/to/your/local/LUTO
git init
二、将本地仓库复制到远程服务器
1. 在远程服务器上创建目录
登录到远程服务器,并创建一个用于存放 Git 仓库的目录:
ssh xp@gadi.nci.org.au
mkdir -p /scratch/jk53/LUTO_XH/LUTO2
2. 将本地仓库直接复制到远程
使用 scp 或 rsync 将本地仓库复制到远程服务器:
scp -r /path/to/your/local/LUTO xp@gadi.nci.org.au:/scratch/jk53/LUTO_XH/LUTO2
3. 在远程服务器上检查文件
登录到远程服务器,确认文件已成功复制:
ssh xp7241@gadi.nci.org.au
cd /scratch/jk53/LUTO_XH/LUTO2
ls -a
确认 .git 目录存在,表示仓库已完整复制。
三、配置远程仓库
1. 在远程服务器上初始化 Git 仓库
如果 .git 丢失,或者需要重新初始化远程仓库,运行以下命令:
git init
2. 设置 Git 配置允许推送到检出的分支
由于默认情况下,Git 不允许推送到当前检出的分支,您需要修改远程仓库的配置:
git config receive.denyCurrentBranch ignore
这将允许您直接推送到当前检出的分支(如 master)。
四、在本地连接远程仓库
1. 添加远程仓库
在本地仓库中,添加远程服务器的仓库作为远程:
cd /path/to/your/local/LUTO
git remote add nci xp@gadi.nci.org.au:/scratch/jk53/LUTO_XH/LUTO2
2. 检查远程仓库是否添加成功
使用以下命令验证远程仓库的配置:
git remote -v
输出类似以下内容:
nci xp@gadi.nci.org.au:/scratch/jk53/LUTO_XH/LUTO2 (fetch)
nci xp@gadi.nci.org.au:/scratch/jk53/LUTO_XH/LUTO2 (push)
五、推送本地更改到远程仓库
1. 推送本地仓库到远程
使用以下命令将本地的 master 分支推送到远程服务器:
git push -u nci master
2. 同步远程仓库的工作目录
推送完成后,远程仓库的工作目录需要与最新的提交同步。在远程服务器上运行以下命令:
ssh xp@gadi.nci.org.au
cd /scratch/jk53/LUTO_XH/LUTO2
git reset --hard
这将确保远程仓库的工作目录与最新提交保持一致。
六. 创建钩子
在本地仓库的 .git/hooks/ 目录下创建 post-commit.cmd 文件,并添加以下内容:
@echo off
REM post-commit hook script
REM Push changes to the remote repository on the server
git push a2h master
创建 post-merge.cmd 文件,并添加以下内容:
@echo off
REM post-merge hook script
REM Push changes to the remote repository on the server
git push a2h master
七、注意事项
在Git中配置自动换行符处理
你可以在Git中配置自动换行符处理,以确保在推送和拉取代码时,Git会自动转换换行符。
设置Git配置
在你的本地仓库中,使用以下命令配置Git:git config core.autocrlf input
否则会遇到错误
sbatch: error: Batch script contains DOS line breaks (\r\n)
sbatch: error: instead of expected UNIX line breaks (\n).
因为Windows使用的是CRLF(\r\n)作为换行符,而Unix/Linux系统使用的是LF(\n)作为换行符。当你将脚本从Windows同步到Linux服务器时,换行符格式会不一致,从而导致这个错误。