Git如何在更改分支时删除一些忽略的文件

时间:2019-01-04 10:46:05

标签: eclipse git branch

我有一个项目,其中包含我的代码的两个版本,一个是“维护”,一个是“新”,用于较新的版本。

我想忽略这些分支中代码中的所有* .min.js文件。某些.js文件位于“新建”中,而不位于“维护”中。每次编辑.js文件时,Eclipse都会生成.min.js。

问题是,当我在“ new”分支上并切换到“ maintenance”分支时,在new中生成的缩小的js和没有维护其.js文件的js仍然存在。

在切换到维护时,有没有办法告诉git删除这些文件?

我想在gitattributes中定义合并策略,而不是忽略.min.js文件,但是Eclipse不处理gitattriutes。

2 个答案:

答案 0 :(得分:1)

未跟踪文件的全部要点是,Git对它一无所知。因此,Git也无法知道删除

Git 确实提供了一种通用机制,可让您在每个git checkout之后运行自己的操作,即所谓的结帐后挂钩。 (无论您的Eclipse IDE是否遵循相同的协议,我都不知道。)结帐后挂钩仅仅是名为.git/hooks/post-checkout的任何可执行文件 1 。在每个git checkout之后,Git将使用the githooks documentation中所述的一些参数运行它。

由于git checkout 可以用于不更改附加HEAD的分支名称的操作,因此您需要进行测试您认为合适的任何条件。例如,您可以检查文档中的第三个参数,称为 flag 。如果已设置,则该命令是修改HEAD绑定到的提交或分支名称的操作。如果HEAD现在已绑定到某个提交或分支,如果其中存在某些*.min.js文件,则应在其中删除这些文件,现在可以删除它们。如果HEAD现在已绑定到某个提交或分支,如果其中不存在,则应在其中创建一些*.min.js文件,如果它们不存在,则现在可以创建它们。

尽管您需要填写缺少的部分,但这样的脚本可能看起来像这样:

#! /bin/sh
# Post-checkout hook to deal with `*.min.js` files.

# If flag is not 1, do nothing (and succeed).
if [ "$3" != 1 ]; then exit 0; fi

# Otherwise, determine whether there are *.min.js files that need to
# be created and/or removed.  The code below is meant to be illustrative,
# not efficient.

for file in $(compute files that should be removed); do rm -f "$file"; done
for file in $(compute files that should be created); do create_minified "$file"; done

exit 0 # always report success, regardless of actual success

最后一行很重要:Git文档声称结帐后挂钩不能影响git checkout的结果,但是实际上,结帐后挂钩的退出状态设置了{{ 1}}本身。如果您的结帐后挂钩报告了故障状态,则git checkout将报告故障状态,这可能会误导大型自动化系统。这可能是好事,也可能是坏事,具体取决于您的观点,因此,尽管最后一行是重要,但对于您的特定应用程序,它不一定正确


1 此处的可执行文件必须是实际上可执行的。也就是说,它不仅需要设置git checkout位(在类Unix系统上,使用xchmod +x或类似的方法来设置可执行位),它还必须< em>可通过chmod 755系统调用直接执行。对于类Unix系统上的脚本,这意味着脚本必须以execve#! /bin/sh之类的行开头,其中#! /usr/bin/env bash之后的路径名是解释器的路径名。可以通过#!#! /usr/bin/env python等使Python脚本可执行,具体取决于您需要调用哪个Python解释器。

答案 1 :(得分:0)

切换到new分支后,可以运行以下命令以使工作树与HEAD状态匹配。

git reset --hard && git clean -dfx