无聊的背景- 概括:我知道我们没有正确使用 GIT!。
这最初是一个小型业余项目,后来发展迅速 - 我的公司使用 Git 来跟踪/管理定制的基于 Web 的软件平台的更改并充当中央存储库。大约 300 台移动设备在启动时从自托管的 Intranet 服务器拉取到本地克隆存储库,这样它们就可以在未连接到网络时访问最新版本的软件(我们使用分支,以便它们只接触成熟/测试过的代码)。
现在我们又向前迈进了一步——我们有一个每日更新的“零件”数据库。我使用 cron 脚本创建了这个数据库的单独版本,以创建可以在本地“未连接的机器”上打开的独立版本。
我的问题
我有一组 PHP 脚本,用于获取数据库表数据并将其导出为应用程序所需的平面文件格式,并将自上一周期以来的任何其他图像复制到正确的位置。所有文件都存储在/var/www/clonedrepository
然后我想在目录上运行以下命令:
git add .
git commit -m "Automatic update: todaysdate"
git push
该存储库是/home/git/repository
使用 git deamon 和 apache 符号链接克隆的,允许 http 访问(用于哑设备克隆)和 SSH(供成人编辑/更新)。
问题是,我是一名网络程序员,但我对此并不熟悉。我设置了 git 存储库,并且熟悉命令行,但我不知道从哪里开始最好。
附注:永远不会发生冲突,因为没有用户会编辑数据文件,并且系统不会编辑数据文件以外的任何内容。
总结一下,我的 Ubuntu Linux 机器上有一个中央存储库(/home/git/repository
),我想从/var/www/clonedrepository
同一机器上的克隆存储库( )每天更新它。
答案1
好的,我自己解决了这个问题......
1)我已经设置了一个包含以下行的脚本:
cd /var/www/partsdb/ >> /home/git/push.log
git pull >> /home/git/push.log
git add . >>/home/git/push.log
git commit -a -m "Scheduled Commit: `date`" >>/home/git/push.log
git push >> /home/git/push.log
echo "Push Backup Successful `date`" >> /home/git/push.log
此脚本将移动到工作存储库,从中央存储库提取所有更改(请记住,这些更改将仅有的影响程序文件,不是数据文件),添加任何更改的数据文件(/data
为了清楚起见,存储在子目录中)提交更改(包括基于日期的自动消息以跟踪更改/责备),然后推回到存储库。
编辑:我已经将-a
标志添加到提交命令中,它将删除自动更新脚本删除的所有文件(add .
添加了任何新文件)。[/编辑]
2)我从 crontab 调用此脚本,以 root 身份执行该脚本(因为 root 是唯一有权在 git 的主文件夹和 /var/www 文件夹中写入的用户),使用以下命令:
0 * * * * root /home/git/gitpush.sh
这将每小时运行一次脚本 - 虽然独立的移动设备只会在启动时(每日/上午)从数据库中提取数据,但本地网络用户将始终拥有最新版本(已推送到主分支)。