在ClearCase中,我们能够创建一个标记基线,其中只包含由ClearQuest管理的特定更改请求修改的二进制文件。作为参考,我们正在使用Jira做同样的事情,与自定义集成。问题是如何使用特定的提交哈希列表引用的文件版本创建Git分支,然后只将这些文件存档到基线.zip文件中。
我们公司正在从ClearCase迁移到Git。我们处理的代码不是传统的基于文本的源代码。它包含在由专有供应商软件创建的二进制对象中,通常是其他二进制文件的.zip存档。我们将二进制对象存储为Git对象。因为我们处理的是二进制文件,所以不执行合并。我们使用LFS锁来保证对文件的单一访问并防止合并的需要。我们的程序员也不使用命令行接口,比如bash。对他们来说,处理“文件”的更新就是签出、更改、签入。Git模式的锁、拉、编辑、添加、提交、解锁超出了它们的能力范围。为了维护ClearCase签出/签入范例,创建了许多包装脚本,这些脚本向程序员隐藏了Git细节。这些脚本从上下文菜单命令中调用。
话虽如此,但请不要回应我们滥用Git。它是一个复杂的工具,并不适合所有的编程环境。然而,Git是目前最流行的版本控制工具。我们已经能够保留我们的程序员熟悉的所有ClearCase接口功能。
程序员不使用分支。我们只保留一个主支行。每个包装器命令都会拉出并推送到源主分支。添加、删除或签入的每个文件都是在单独提交下完成的。
以下步骤不是由典型的程序员执行的,而是由Git管理员执行的。
目前,我们:
git rm -rf .以消除所有内容
不管我们做什么,git归档都希望在上次提交存档时将回购中的所有内容都包括在内。这就是第三步的原因。
我们尝试了一个步骤6.1,即只是压缩包含项目的文件夹。我们得到的只是.zip中的文件,这就是尝试步骤4- a、b、c的原因。
似乎我们正在执行许多步骤来完成一些简单的事情。我们有可能错过了显而易见的事情吗?有人能建议一种更直截了当的方法吗?回想一下,最终的.zip结果必须只包含特定提交修改的文件。
发布于 2019-09-10 16:01:41
我们的程序员也不使用命令行接口,比如bash。对他们来说,处理“文件”的更新就是签出、更改、签入。Git模式的锁、拉、编辑、添加、提交、解锁超出了它们的能力范围。为了维护ClearCase签出/签入范例,创建了许多包装脚本,这些脚本向程序员隐藏了Git细节。
你真是误入歧途..。
话虽如此,但请不要回应我们滥用Git。
糟了。不要紧。继续说吧。
程序员不使用分支。
那为什么要用Git呢?这个工具的所有成功都是基于在分支之间完成的拉/合并请求。
对于源代码(二进制文件通常在像Nexus这样的工件引用中发布/exported )
你好像滥用了G..。(啊,对,抓一下那个)
git archive希望在上次提交存档时将回购中的所有内容都包括在内。
这就是Git存储库的本质,它是快照(提交)的集合,每个快照都代表当时存储库的全部内容。
包含来自特定提交的文件
提交的意思是:所有的文件,而不仅仅是“修改的文件”。
我在“Single working branch with Git”中提到:
使用 command,您可以轻松地签出
master上)这就是:
git diff-tree -r --no-commit-id --name-only --diff-filter=ACMRT $commit_id | tar -czf file.tgz -T -如果您想使用 only
git archive -o patch.zip a9359f9 $(git diff --name-only a9359f9^..a9359f9)(用自己的提交id替换a9359f9 )
在后一种情况下,您甚至可以跳过我前面提到的额外结帐。
我不知道
git diff-tree --diff-filter=ACMRT选项。有了这一点和普遍的洞察力,它现在正在按我的意愿工作。
https://stackoverflow.com/questions/57872255
复制相似问题