混帐 - 下裸露的库中检出单个文件(git - checkout single file under

2019-08-03 06:29发布

在服务器上我有纯仓库是原点的发展过程,并简化部署到QA环境。

因此,在post-receive它根本

GIT_WORK_TREE=/home/dev git checkout -f

但是,随着产品变得更为复杂,还有一些其他的事情应该发生。 所以,现在它被处理deploy.sh脚本也是由仓库跟踪。 因此,我想要做的是能够代替检查了整个仓库签仅deploy.sh并运行它。 我觉得这样的事情会的工作:

SOURCE_PATH="/home/dev"
GIT_WORK_TREE=$SOURCE_PATH git checkout deploy.sh
$SOURCE_PATH"/deploy.sh"

但它不工作给予错误:

error: pathspec 'deploy.sh' did not match any file(s) known to git.

我究竟做错了什么? 还是仅仅是不可能做到这一点呢?

Answer 1:

正如我在“解释从git的结帐只有一个文件 ”,你不能没有克隆或先取出签只有一个文件。

但是,你git show该文件 ,这意味着你可以转储其内容为/another/path./deploy.sh文件,执行该文件。

git-show HEAD:full/repo/path/to/deploy.sh > /another/path./deploy.sh
/another/path./deploy.sh

既然你从后收到钩执行的是, git-show将展示最新版本的的deploy.sh文件。


另一种方法将尝试

 GIT_WORK_TREE=$SOURCE_PATH git checkout -- path/to/deploy.sh

和Google Checkout只有文件,直接在你的工作树。

在“ -- ”帮助Git命令来了解它是一个文件,类似这样的标记或命名分支不是另一个参数。

从OP AlexKey的考验,它要求工作树已被签出(完全)至少一次。



Answer 2:

混帐节目或类似的混帐猫BLOB文件的工作方式更多或更少的文本文件罚款,但他们是无望的二进制文件。

它工作可靠对于任何类型的文件,甚至更好的方法允许检出整个文件夹:

git archive mybranch folder/file.txt --output result.tar

它创建所需内容的tar归档,正是源控制坐镇文件。 工程与二进制文件完全没有问题。

你需要做的唯一事情是提取该tar文件

tar -xf result.tar

看到我的博文更多细节



Answer 3:

我知道这是ooooooooold,但是我发现我自己用的情况下此功能,并四处张望了一会儿了几个解决方案组合成一个简单的一行前较好地解​​决了这一点:

GIT_WORK_TREE=/home/dev git checkout $branch -- deploy.sh

就我而言,我只是想能够“窥视”到我的一些裸露的库而不拆包整个事情(其中有些是巨大的)。 人们都在谈论稀疏检出和其他类似的东西,但我只需要一次性的功能。 要检查只是“文件/健康记录”文件夹,例如,我会做到以下几点:

GIT_WORK_TREE=/tmp/my-files git checkout master -- "Documents/Health Records"

看哪! 在那里,它没有出现。



文章来源: git - checkout single file under bare repository
标签: git sh githooks