从本地存储库中删除目录而不影响远程存储库 - 使git忽略该目录

时间:2016-02-10 04:38:48

标签: git version-control atlassian-sourcetree

假设我有以下目录结构

DirA (git Repository)
  |_DirB
  |_DirC
  |_DirD
     |_DirE
     |_DirF

我目前有我的git Repository看起来像Above 我的存储库中的所有内容都已被推高。现在我想删除文件夹DirF。我想删除这个文件夹,没有git告诉我已经进行了更改,并且该文件夹的文件不存在。我只想告诉git忽略或停止跟踪此文件夹及其内容。我已经尝试了几件事,但是我可能做错了,因为我无法完成这项任务。这是我到目前为止尝试的两件事

Attempt:1
git update-index --assume-unchanged DirA/DirD/DirF
fatal: Unable to mark file DirD/DirF

然后我尝试在DirD中放置一个.gitignore,其中只有DirF/。然而,这似乎不起作用。 有什么建议。目前正在跟踪文件夹DirF并将其推送到存储库。

2 个答案:

答案 0 :(得分:1)

- 假设未标记的内容不适用于目录,但应该适用于文件。你应该在DirF中的所有文件上使用它。

答案 1 :(得分:1)

我扩展了@DDoSolitary的出色答案。

实际上,当设置为忽略时,可以在删除文件之前使用find来迭代文件:

find ./DirD/DirF -type f -name "*" \
 -exec git update-index --assume-unchanged {} \;
 -exec rm {} \;

注册,然后删除每个。

采用另一种方法,使文件不再被忽略,不能使用find,因为文件不是文件。

但是,the git-update-index doc说:

  

要查看哪些文件设置了“假定不变”位,请使用:    (请参阅git-ls-files [1])。

git ls-files -v  

导致某行

H <not ignored file including path>
h <ignored file including path>

字母不重要,只有大小写(小写表示忽略,大写表示不忽略)。

The git-ls-files doc说:

  

-v       与-t相似,但对于标记为未假定的文件,请使用小写字母(请参见git-update-index [1])。

因此可以自动执行忽略操作。