如何在Git存储库中存储文件的最新副本,而不会跟踪对其的更改?
如何在Git存储库中存储文件的最新副本,而不会跟踪对其的更改?
我克隆了一个包含一些.csproj
文件的项目。我不希望/喜欢我的本地csproj
文件被Git跟踪(或在创建补丁时被引用),但很明显它们在项目中是需要的。\n我已经在我的本地.gitignore
文件中添加了*.csproj
,但这些文件已经在仓库中了。\n当我输入git status时,它显示了我对csproj
的更改,而我对跟踪或提交补丁不感兴趣。\n如何从我的个人仓库中移除对这些文件的“跟踪”(但保留它们在源代码中以便我可以使用),这样我在执行状态检查(或创建补丁)时就不会看到这些更改?\n是否有一种正确/规范的处理这种情况的方法?
如何在不跟踪文件更改的情况下将文件的最新副本存储在Git仓库中?
有时候,我们希望在Git仓库中存储一个文件的最新副本,但又不希望对其进行跟踪。这种情况通常发生在我们希望保留文件的当前状态,但不希望在每次更改时都将其标记为已修改的情况下。
解决这个问题的方法是使用Git的assume-unchanged
命令。通过运行git update-index --assume-unchanged file.csproj
命令,Git将不会自动检查file.csproj
文件的更改,这样在您更改该文件时,它就不会出现在git status
中。这样,您可以将所有的.csproj
文件都标记为不进行跟踪,尽管您需要手动标记上游仓库发送给您的任何新文件。如果您在.gitignore
或.git/info/exclude
中设置了这些文件,那么您创建的文件将会被忽略。
然而,有人可能会质疑是否应该将.csproj
文件纳入版本控制。如果.csproj
文件是IDE的配置文件(类似于Eclipse的.eclipse
和.classpath
文件),那么它们应该根本不被纳入版本控制。另一方面,如果.csproj
文件是构建系统的一部分(类似于Makefiles),那么显然应该将其进行版本控制,并且有一种方法可以获取本地可选更改(例如从本地.csproj
文件中获取配置)。可以将构建划分为全局部分和本地覆盖。
在Git中,file.csproj
是一个文件名,而不是一个前缀。如果您想检测是否对某个文件进行了标记,则可以使用git ls-files -v
命令。它将显示所有被假定为未更改的文件,其标识为小写(例如,使用h
而不是通常的H
)。
在实际使用中,需要注意的是,Git并不保证遵守--assume-unchanged
标志。如果Git能够确定已标记为假定未更改的路径已经发生更改,它有权报告该路径已被修改,即使不进行额外的lstat(2)
操作。因此,使用--assume-unchanged
标志时,需要谨慎对待。
总结起来,要在Git仓库中存储文件的最新副本而不对其进行跟踪,可以使用git update-index --assume-unchanged
命令。此命令将阻止Git自动检测文件的更改,并在每次更改时将其标记为已修改。需要注意的是,使用--assume-unchanged
标志时,Git并不保证遵守该标志。因此,在实际使用中,需要谨慎对待并进行适当的测试和验证。
如何在Git存储库中存储文件的最新副本而不跟踪其更改?
在使用Git进行版本控制时,有时我们希望在存储库中保留文件的最新副本,而不跟踪对其的更改。这可能是因为文件包含敏感信息,或者我们希望文件保持原样而不被覆盖。以下是几种解决此问题的方法:
1. 使用git rm --cached <file-name>
命令或git rm -r --cached <folder-name>
命令可以将文件从存储库中删除,但保留在本地。这意味着当其他人从存储库中拉取代码时,文件将被删除。
2. 使用git update-index --assume-unchanged <path-name>
命令可以告诉Git停止检查特定文件或文件夹的更改。这对于包含大量文件的文件夹(例如SDK)非常有用,因为这些文件夹很可能不会发生更改。如果文件/文件夹发生了上游更改(拉取代码时),assume-unchanged
索引将被重置并且文件/文件夹将被覆盖。
3. 使用git update-index --skip-worktree <path-name>
命令可以告诉Git您希望拥有自己独立的文件或文件夹副本。例如,您可能不希望覆盖(或删除)生产/暂存配置文件。这样的文件将被忽略,不会被跟踪和覆盖。
需要注意的是,git update-index
命令不会在Git中传播,因此每个用户都需要独立运行该命令。
要撤消上述操作,可以使用相应命令的[no-]
变体,例如git update-index --no-assume-unchanged <path-name>
和git update-index --no-skip-worktree <path-name>
。
总结起来,我们可以使用以上三种方法来将文件的最新副本存储在Git存储库中而不跟踪其更改。通过选择适合自己需求的方法,我们可以保护敏感信息或保持文件的原始状态。
如何在Git存储库中存储文件的最新副本,而不跟踪对文件的更改?
有时候我们希望在Git存储库中存储文件的最新副本,而不跟踪对文件的更改。这可能是因为我们希望保留一些特定文件的个人副本,而不希望其他开发人员的更改影响到这些文件。解决这个问题的方法是使用一些Git命令来从版本控制中删除文件的跟踪。
首先,我们可以使用git rm --cached
命令从版本控制中删除要移除的文件。只要本地的忽略模式设置正确,这些文件就不会在git status
的输出中显示。
然后,为了防止Git检测到这些文件的更改,我们可以使用命令git update-index --assume-unchanged [路径]
。
如果我们希望保留文件的个人副本,同时又不希望覆盖(或删除)生产/暂存配置文件等,我们可以使用命令git update-index --skip-worktree [路径名]
。
通过使用这些命令,我们可以在Git存储库中存储文件的最新副本,而不跟踪对文件的更改。这样,每个开发人员都可以维护自己本地的文件副本,而不会受到其他人的更改的影响。
更多关于如何取消跟踪文件的信息可以查看这个链接:http://source.kohlerville.com/2009/02/untrack-files-in-git/