【发布时间】:2010-12-07 13:51:21
【问题描述】:
我不确定我正在寻找的是否是 git-stash,但这就是我想要做的。
我有为本地使用定制的配置文件。这些文件已经存在于 Git 中。 现在,如果我添加一个新功能(更改其他文件),我想隐藏我的配置并点击提交,并且只提交与我的新功能相关的文件。
如果我使用 git-stash,它会存储所有内容。 如何存储我的配置文件(仅)?
谢谢
【问题讨论】:
标签: git
我不确定我正在寻找的是否是 git-stash,但这就是我想要做的。
我有为本地使用定制的配置文件。这些文件已经存在于 Git 中。 现在,如果我添加一个新功能(更改其他文件),我想隐藏我的配置并点击提交,并且只提交与我的新功能相关的文件。
如果我使用 git-stash,它会存储所有内容。 如何存储我的配置文件(仅)?
谢谢
【问题讨论】:
标签: git
两件事。
您应该只暂存您想要提交的文件。这是使用git add 完成的。即使您有大量更改,您也可以只暂存您想要使用 git add 提交的字段(以及使用 git add -p 的文件片段)。你应该这样做。
除非您的配置文件是您的应用程序不可或缺的一部分(并且您想要对其进行版本控制),否则您应该ignoreing 甚至不对其进行版本控制。
【讨论】:
使用git add -p 并仅选择您要提交的更改。无论如何,这是一个很好的做法,因为它可以作为一个小的代码审查。
【讨论】:
stash 旨在将所有未提交到任何分支的本地更改保存到临时未命名的分支中。本质上,它的内部结构与分支相同。
你甚至不应该检查配置文件,如果你这样做了,你应该把它放在一个你只在本地系统上合并的分支中。
【讨论】:
这已经很晚了,但我找到了一个更好的解决方案(几年前)。
使用 git-assume-status 和 git-unassume-status
#!/usr/bin/env ruby
# used to ignore modified files -- e.g configuration files
ret=%x{git status --porcelain}
files=ret.lines.map { |x| x.split[1] }
files.each do |file|
# makes files resistant to git reset hard
%x{git update-index --skip-worktree #{file}}
%x{git update-index --assume-unchanged #{file}}
end
对于 git-unassume
#!/usr/bin/env bash
# used to ignore modified files -- e.g configuration files
cd .git
rm index
cd ..
git reset
这样你可以修改你的配置文件,但被 status 和其他 git add 命令忽略。 如果你改变主意,你运行 git-unassume
【讨论】: