我克隆了一个包含一些.csproj文件的项目。我不需要/喜欢我的本地csproj文件被Git跟踪(或在创建补丁时被提起),但很明显,项目中需要这些文件。

我已经将*.csproj添加到我的LOCAL.gitignore中,但文件已经在repo中。

当我键入gitstatus时,它显示了我对csproj的更改,我对跟踪或提交补丁程序不感兴趣。

如何从我的个人存储库中删除这些文件的“跟踪”(但将它们保存在源中,以便我可以使用它们),以便我在执行状态(或创建补丁)时不会看到更改?

是否有正确/规范的方法来处理这种情况?


当前回答

单线回答git更新索引--假定不变[路径]

每当您有一个位于中央存储库和本地存储库中的文件时,请使用此选项。您需要对该文件进行更改,但不能将其转移/提交到中央存储库。此文件不应添加到.gitignore中。因为如果系统管理员引入了文件中的新更改,高级开发人员需要在所有本地repo中分发。

最佳示例:DB连接的配置文件。在中央存储库中,您将拥有生产数据库服务器的所有用户名、密码、主机和端口值。但在本地开发中,您应该只使用本地或任何其他开发DB服务器(您的团队已设置)。在这种情况下,您希望在配置文件中进行更改,但不应提交到中央存储库。

最好的

其他回答

忘了你的gitignore?

如果您在本地拥有整个项目,但忘记添加git-ignore,现在正在跟踪一些不必要的文件,请使用此命令删除所有内容

git rm --cached -r .

确保您处于项目的根位置。

然后你可以像往常一样

Add

git add .

犯罪

git commit -m 'removed all and added with git ignore'

Push

git push origin master

结论

希望这能帮助那些不得不对自己的.git进行更改的人。

它会删除整个缓存看看你的.gitignore添加要跟踪的文件推送至您的回购

只需调用git-rm-缓存在要从修订控制中删除的每个文件上就可以了。只要本地忽略模式正确,您就不会在git状态的输出中看到这些文件。

请注意,此解决方案从存储库中删除文件,因此所有开发人员都需要维护自己的本地(非版本控制)文件副本

要防止git检测到这些文件中的更改,还应使用以下命令:

git update-index --assume-unchanged [path]

你可能想做什么:(从下面@Ryan Taylor回答)

这是为了告诉git您想要自己的独立版本的文件或文件夹。例如,您不想覆盖(或删除)生产/登台配置文件。git更新索引--跳过工作树<路径名>

完整答案在以下URL中:http://source.kohlerville.com/2009/02/untrack-files-in-git/

为了忽略对目录中所有文件(特定类型)的任何更改,我必须结合这些方法,否则如果文件以前不存在,就会创建这些文件。

在下面,“excludedir”是我不希望看到更改的目录的名称。

首先,从更改跟踪缓存中删除任何现有的新文件(而不从文件系统中删除)。

git status | grep "new file:" | cut  --complement -d " " -f1-4 | grep "^excludedir" | xargs git rm --cache

您可以使用modified:执行相同操作。重命名:有点复杂,因为您必须查看新文件名的post->位,然后按照下面对delete:的描述执行pre->位。

deleted:文件证明有点复杂,因为您似乎无法更新本地系统上不存在的文件的索引

echo .deletedfiles >> .gitignore
git status | grep "deleted:" | cut  --complement -d " " -f1-4 | grep "^excludedir" > .deletedfiles
cat .deletedfiles | xargs -d '\n' touch
cat .deletedfiles | xargs -d '\n' git add -f
cat .deletedfiles | xargs -d '\n' git update-index --assume-unchanged
cat .deletedfiles | xargs -d '\n' rm

上面列表中的最后一个命令将再次从您的文件系统中删除文件,因此请随意省略。

然后,阻止该目录中的更改跟踪

git ls-files excludedir/ | xargs git update-index --skip-worktree
git update index --skip-worktree excludedir/

为了节省一些时间,您添加到.gitignore中的规则可以用于删除多个文件/文件夹,即。

git rm--缓存的app/**/*.xml

or

git rm--缓存的-r app/widgets/yourfolder/

电子交易中心。

单线回答git更新索引--假定不变[路径]

每当您有一个位于中央存储库和本地存储库中的文件时,请使用此选项。您需要对该文件进行更改,但不能将其转移/提交到中央存储库。此文件不应添加到.gitignore中。因为如果系统管理员引入了文件中的新更改,高级开发人员需要在所有本地repo中分发。

最佳示例:DB连接的配置文件。在中央存储库中,您将拥有生产数据库服务器的所有用户名、密码、主机和端口值。但在本地开发中,您应该只使用本地或任何其他开发DB服务器(您的团队已设置)。在这种情况下,您希望在配置文件中进行更改,但不应提交到中央存储库。

最好的