我在大学服务器上有一个帐户。我想与另一个学生分享一个程序代码。我想我应该把它放在我的 GitHub 帐户上。不幸的是,我不能,因为代码是竞赛的一部分。
我决定制作一个 Makefile,这样我们就可以轻松上传和下载文件。过了一段时间,我终于明白这还不够。然后我实现了补丁系统,这样只存储更改。同时发生的小更改应该没有问题。
Makefile 几乎可以完成工作,但有些细节我无法解决。Makefile
all: download
PHONY: all, download, upload, getFiles
.ONESHELL:
getFiles:
rm ../.tmp -r
mkdir ../.tmp
@(ssh $(user)@host "tar c *") | tar xv -C ../.tmp
download: getFiles
@diff -u ../.tmp . | patch -p1
rm ../.tmp -r
upload: getFiles
@diff -uN ../.tmp . | (ssh $(user)@host "patch -p1")
rm ../.tmp -r
我从主机上删除了所有数据。现在我想上传,但 tar 停止了程序,因为没有文件可以下载以查找更改。
此外,我无法决定是否在 diff 中使用 -N?简单地说,我不知道删除文件时它的表现如何。
还有一个问题:当出现问题时,.tmp 目录不会被删除。每次都应该删除该目录。下一步操作始终下载当前“存储库”状态。
我完全认识到它不是一个存储库,但我无法在远程主机上设置服务器程序,我认为 Makefile 可以帮我完成这项工作。
如有任何提示我将不胜感激。
答案1
我终于设法修复了 Makefile。我认为它工作正常。显然它不是一个专业的存储库,但它可以完成工作。Makefile:
-include name
all: download
PHONY: all, download, upload, getFiles
DIFFFLAGS = -uNr
.ONESHELL:
getFiles:
rm .tmp -r
mkdir .tmp
(ssh $(user)@$(HOST) "tar c ") | tar xv -C .tmp
download: getFiles
diff $(DIFFFLAGS) program .tmp/roboty | patch -p1 -d program
upload: getFiles
diff $(DIFFFLAGS) .tmp/roboty program | (ssh $(user)@$(HOST) "umask 070 && patch -p1")
patch-extern:
diff $(DIFFFLAGS) program program-workplace | patch -p1 -d program
patch-local:
diff $(DIFFFLAGS) program program-workplace | patch -p1 -dR program-workplace
backup:
tar cf backup.tar program-workplace
.ONESHELL:
clear:
rm `find program-workplace/ -name "*~"`
rm `find program-workplace/ -name "*.class"`