git包含一个文件,但其更改未跟踪

时间:2011-11-30 23:04:00

标签: git svn

我想在我的存储库中包含一个源文件(当有人克隆存储库时将其传递),但默认情况下会忽略它的更改。

git update-index --assume-unchanged ...不起作用,因为它仅适用于本地索引。我希望所有用户默认忽略该文件。

.gitignore不起作用,因为如果我通过git add -f ..跟踪文件,则会跟踪对其的更改。

我正在努力实现如果我svn add编辑文件然后svn:ignore编辑它会发生什么。

修改

看起来这在Git中是不可能的,我改变了源文件的组织和构建,依赖于这种旧的Subversion行为。

示例:

$ git clone git@git:gsmith/sandbox.git
snip...
$ cd sandbox/
$ ls -a
.  ..  .git  .gitignore  gitignored  tracked
$ cat .gitignore 
gitignored

$ echo foo >> gitignored 
$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   gitignored
#
no changes added to commit (use "git add" and/or "git commit -a")

我希望忽略此文件。

$ git reset --hard HEAD
HEAD is now at 34b1f3d initial setup
$ git rm gitignored
rm 'gitignored'
$ git commit -m "test"
[master cd8199d] test
 1 files changed, 0 insertions(+), 1 deletions(-)
 delete mode 100644 gitignored
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)
$ ls -a
.  ..  .git  .gitignore  tracked

$ echo foo >> gitignored
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)

现在它被忽略了。但是,克隆存储库的人将无法获取gitignored

的内容

2 个答案:

答案 0 :(得分:0)

  1. 将文件添加到您的repo特定.gitignore
  2. 如果已经跟踪过(可能是您的情况),请执行git rm --cached myfile
  3. 希望这是你想要的。如果没有,您可以查看this

答案 1 :(得分:0)

要重新标记您的标题:您要跟踪某个文件,但对其进行的更改未经跟踪。这听起来像是一个矛盾。据推测,您有一些文件以本地方式更改,这些文件对存储库的其他用户没有意义,但也包含每个人都需要的内容。答案当然不是那样做的。有两个主要选项:

  • 拆分文件。一部分是“本地”部分,不需要跟踪,另一部分是核心/共享部分,包含每个人都需要的东西,通常不会修改。您应该在build / deploy / runtime中自动创建空/模板本地文件。

  • 将文件部署为模板,然后使用,复制它。您可以根据需要在build / deploy / runtime自动执行复制。

无论哪种方式,问题都不是“我怎么告诉Git不跟踪我刚刚告诉它跟踪的这个文件?”但是“为什么我要跟踪并不跟踪相同的内容?”