因此,目标是将我的项目推送到核心repo,我的所有开发文件都存放在那里,以用于备份目的。
然后我想将dist
文件夹发送到像www/site.com/v0.0.1
这样的目录中,出于演示目的,不需要开发文件,这只会导致膨胀,因为我有多个目录。
所以我现在有一个.gitignore
,它几乎忽略了除了dist
之外的所有东西。
我运行了git rm -r --cache
,现在我只推dist
,但现在的陷阱是我无法备份我的核心回购,以防我的本地环境被破坏,那么我所拥有的只是所有这些编译的代码,我不会对此进行逆向工程。
#!/bin/sh
currentVersion=git describe --abbrev=0
mkdir /var/www/example.com/public_html/projects/$currentVersion
git --work-tree=/var/www/example.com/public_html/projects/$currentVersion --git-dir=/var/repo/cool.git checkout -f
我能想到的两种情况
两个远程repo(core.git,demos.git),
git add remote <ssh-repo/core.git & demos.git>
,陷阱是.gitignore
,我应该如何指定哪个repo使用忽略?还有两次回购有点糟糕。在bash脚本中编写一些内容,使我能够忽略文件,然后添加另一个工作树,或者可能只使用linux命令来获取dist并将其放入我想要的版本中,以用于此
post-receive
事件?
第三个可能使用分支,我仍然是一个git新手,不确定我能做什么。
EDIT:所以很明显,如果我只是推送dist文件夹,两个repo是愚蠢的,所以我认为在bash脚本中,我需要以某种方式只取dist文件夹并使用命令将其复制到我想要的路径中。
如果dist目录只包含生成的工件,并且可以从core文件的其余部分重新创建,我建议使用2个repos:
- dist用于生成的工件
- 剩余的core加上distrepo的符号链接(是否添加到git,每个都有优点和缺点,由您决定)
这条线上的一些东西(它们不必并排,只要你方便):
$~/git> ls -la *
core:
total 36
drwxrwxr-x 3 user at 4096 Apr 22 22:22 .
drwxrwxr-x 4 user at 4096 Apr 22 22:22 ..
-rw-rw-r-- 1 user at 22811 Apr 22 22:22 blah
lrwxrwxrwx 1 user at 7 Apr 22 22:22 dist -> ../dist
drwxrwxr-x 8 user at 4096 Apr 22 22:23 .git
dist:
total 16
drwxrwxr-x 3 user at 4096 Apr 22 22:23 .
drwxrwxr-x 4 user at 4096 Apr 22 22:22 ..
-rw-rw-r-- 1 user at 84 Apr 22 22:24 blah_dist
drwxrwxr-x 8 user at 4096 Apr 22 22:24 .git
不需要.gitignore文件。来自core目录的推送将转到源代码备份回购,来自distdir的推送(甚至从core内部的符号链接下)将转到部署回购。Git足够聪明,不会混淆2个转发:
$~/git/core> git status
On branch master
nothing to commit, working directory clean
$~/git/core> cd dist/
$~/git/core/dist> git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: blah_dist
no changes added to commit (use "git add" and/or "git commit -a")
$~/git/core/dist>
即使你有一些文件应该由两个repo共享,你也可以认为它们是"生成的":将它们放在corerepo中,并根据需要通过将其直接复制到dist符号链接/restore中来"生成"它们。
您甚至可以使用corerepo中的git-push钩子来自动生成/刷新dist工件。