我们希望使用Git在我们的Web服务器上部署代码。因此,我们在生产服务器上初始化了一个裸仓库。每当我们发布一个新版本,我们执行一个git结帐到网站的DocumentRoot:Git签出到外部工作树并删除已删除的文件
git --work-tree=/path/to/webroot/ checkout -f master
在webroot
子目录,也有未通过的Git跟踪的几个文件(缓存文件,用户上传文件等等。)。这些必须当然不会被Git在执行结帐时删除(并且此部分目前工作正常)。
然而,Git的也不会删除了以前跟踪,但在此期间已被删除的文件(例如,他们在发展过程中已被删除,因为他们不再需要)。这些文件目前经历了checkout
进程,导致“死”文件数量稳步增加。有没有办法让Git在执行checkout
时删除这些文件?重现步骤 -
编辑:
# create dirs and repos
cd /base/path
mkdir repo.git
mkdir target
cd repo.git && git init
# create, add and commit two files
touch test1.txt
touch test2.txt
git add test1.txt test2.txt
git commit -m testcommit
# checkout to target directory
git --work-tree=../target checkout master -f
# target directory now contains both files
# remove one file from file system and git repo, commit
rm test2.txt
git rm test2.txt
git commit -m deletecommit
# checkout to target again
git --work-tree=../target checkout master -f
# target still contains both files
我试图做同样的事情,你做了,它适用于我。你能创建一个最简单的例子并展示如何重现它吗? – pqnet
当你说文件被删除时,你的意思是你刚刚从工作树中删除它们,还是实际上从git索引中删除了它们?例如。在这种情况下,你需要后者,通过'git rm'完成 – lemonhead
我从文件系统和存储库中删除了它们。我添加了一个最小的工作示例来说明问题。 – TheWolf