abstract:如何把一份10G的代码从本地传输到远程服务器
story:原来git也会被push死

以传输HSI_ATTACK2代码为例

查看子文件夹大小

linux:在母目录下输入:

du -h –max-depth=1 | sort -hr

  • -h:hunman redable,人类可读
  • –max-depth=1:最大深度,为1则只统计下一级目录的大小,不会具体到文件
  • |:管道,把数据传输到sort管道里
  • -hr:按易读数字反向排序,h指明白1G比200M大,r指reverse,逆序

结果:
alt text

把占用大的数据通过rsync传输,git仅传输代码

1. Git

git不能传输过大文件夹,例如这里的10G直接push会连接超时

1.1. .gitignore

把不想要的文件类型或文件目录写入.gitignore

bash:
nano .gitignore # 创建并打开.gitignore文件
# 写入
params/
logs/
RESREPORT/
dataset/
abundance_matrix/
# ^X退出编辑

查看文件

bash:
cat .gitignore # 用于查看简短文件 直接将文件内容输出在终端
less .gitignore # 查看长文件 可翻页 按q退出

1.2. 在服务器上建仓库

之前仓库一直都建立在github上,而仓库也可以建立在服务器上,而且仓库可以不托管源代码,只托管代码的“基因”,也就是–bare,通过克隆仓库复原源代码

(本地的wsl上:)
从用du查看的目录大小可以发现,.git托管了所有代码的所有更改,特别臃肿,所以删掉

rm -rf .git 重新初始化(在本地的HSI_ATTACK2目录下) git init 确保已经编辑好.gitignore后,将更改加入暂存区 git add . 从暂存区提交到本地仓库(.git) git commit -m “Initial commit”

(服务器上:)
回到家目录:

cd ~ (查看家目录指的是哪个目录:) echo $HOME 创建一个仓库文件夹,并cd进去: mkdir HSI_ATTACK2.git cd HSI_ATTACK2.git 初始化,并且只记录版本更新信息,不记录源代码(可以根据这些信息还原源代码) git init –bare

现在这个仓库是空的,要从本机推代码过来。
(本地wsl上:)
本地的仓库没有关联远程仓库,故先关联

git remote add origin ssh://user@ip:6000/home1/xiechenzhangzhu/HSI_ATTACK2.git 其中origin是给后面那一坨仓库起的名字,后面那一坨是origin的地址,跟在GitHub上面copy下来的http阿巴阿巴是一个意思,告诉本地文件要连接的远程仓库在哪
把本地仓库的代码(main分支)推送给远程仓库origin的main分支: git push -u origin main

(远程服务器上:)
把这个仓库克隆到这个服务器上

git clone ~/HSI_ATTACK2.git HSI_WORK

git clone 仓库地址 克隆后文件夹

注意,克隆后会在家目录下生成一个HSI_WORK文件夹,若为空,则是没有打开含有文件的分支。进入该文件夹,查看当前分支

git branch # 带*的是当前分支 进入有内容的分支 git chekout 分支名 此时克隆后的文件夹中就会有源代码了

2. rsync

okay,源代码通过git传过去了,大的数据用rsync慢慢传。windows系统盘的文件都在wsl的mnt目录下,在wsl打开要传的目录:

rsync -avzP -e ‘ssh -p 6000’ ./params ./abundance_matrix ./dataset xiechenzhangzhu@cois.cloud:~/

  • -a:最常用,保证文件夹递归同步,并保留文件的修改时间、权限、软链接等属性

  • -v:保证文件夹递归同步,并保留文件的修改时间、权限、软链接等属性

  • -z:在传输过程中对数据进行压缩,减少带宽占用

  • -p:最重要!中断了可以从中断的地方开始继续传,不用重头开始

  • -e ‘ssh -p 6000’:指定远程端口

  • ./params ./abundance_matrix ./dataset :要传输的文件夹们的路径:目录A 目录B 目录C
    重点!!!:
    1. 如果末尾不带/,如这里所示,把 params 文件夹本身搬过去。结果:~/params/…
    2. 如果结尾带/,./params/,则把 params 文件夹里面的内容搬过去,内容直接散落在 ~/ 下

  • xiechenzhangzhu@cois.cloud:~/:远程服务器:目标目录,指明要把文件放在哪