我有一个包含敏感数据的文件,所以我不想将此文件的内容推送到远程服务器.
为了实现这一点,我在文件为空时进行了提交,并将此空文件推送到服务器(GitHub).然后用敏感数据填充文件并应用git update-index --skip-worktree path/to/file.但我没有做出任何承诺.
现在我正在尝试切换我的分支,但是我收到了这个错误:
error: Your local changes to the following files would be overwritten by checkout:
path/to/file
Please, commit your changes or stash them before you can switch branches.
Aborting
Run Code Online (Sandbox Code Playgroud)
skip-worktreeINSTEAD OF assume-unchanged?我读了几个关于这个问题的SO问题,并找到了Borealid的答案.
--assume-unchanged假定开发人员不应更改文件.此标志用于提高SDK等不可更改文件夹的性能.
- 当你指示git不要触摸特定文件时, - skip-worktree非常有用,因为开发人员应该更改它.例如,如果主存储库上游托管了一些生产就绪配置文件,并且您不想意外地提交对这些文件的更改,那么--skip-worktree正是您想要的.
在此之后,我发现了Jeff的问题和VonC的回答.杰夫的问题与我的问题几乎相同,我遵循了VonC的解决方案.但是这对我不起作用.也许是因为git版本的差异.因为这个问题来自2012年.我们与VonC进行了交谈,他说这是一个新问题,因为他不记得答案了.
我试图使用--assume-unchanged和--skip-worktree 在一起,软正在重置worktree.但没有改变.
你能帮我解决一下我的问题吗?
谢谢.
假设我有一个已经被 git 跟踪的工作树。
.
??? parent
? ??? child1
? | ??? file1.txt
? ??? child2
? | ??? file2.txt
? | ??? grandchild
? | ??? file3.txt
? ??? somefile.txt
? ??? anotherfile.txt
|
Run Code Online (Sandbox Code Playgroud)
我想标记其中的每个跟踪文件,parent以便 git 不再跟踪对它们所做的任何更改,最终将包括somefile.txt, anotherfile.txt, file1.txt, file2.txt, file3.txt.
.gitignore仅适用于未跟踪的文件,所以我使用--skip-worktree.
我试过:
1.
git update-index --skip-worktree parent/
Run Code Online (Sandbox Code Playgroud)
给了我,Ignoring path parent/但是当我检查时git ls-files -v,它仍然显示我想跳过的文件仍在跟踪中。
2.
git update-index --skip-worktree parent/*
Run Code Online (Sandbox Code Playgroud)
它给了我fatal: Unable to mark file …
在我的机器上,我已经开始--skip-worktree了config/database.yml.
git update-index --skip-worktree config/database.yml
Run Code Online (Sandbox Code Playgroud)
另一位开发人员config/database.yml在处理项目时已提交并合并到开发分支的更改中.
现在,当我这样做时git pull origin develop,我明白了
Andrews-Air:[project] agrimm$ git pull origin develop
From bitbucket.org:[company]/[project]
* branch develop -> FETCH_HEAD
Updating [SHA]..[Another SHA]
error: Your local changes to the following files would be overwritten by merge:
config/database.yml
Please, commit your changes or stash them before you can merge.
Aborting
Run Code Online (Sandbox Code Playgroud)
我该如何处理这种变化?我应该这样做
git update-index --no-skip-worktree config/database.yml
git stash save "Save changes to config/database.yml"
git pull origin develop
git stash apply
# …Run Code Online (Sandbox Code Playgroud) 我自己使用 git 已经有一段时间了,现在正在为我们的团队设置一个 repo。我们开发了一个电子商务平台。
有一些目录和文件要忽略,例如上传目录和特定于环境的配置文件。
虽然配置文件在 .gitignore 上,但我想用--skip-worktree或忽略上传目录--assume-unchanged。
我的问题 - 我找不到明确的答案 - 是--assume-unchangedor--skip-worktree位是否会被推送到上游回购?
如果不是,那么确保 git 不会跨存储库的所有实例操作上传目录的内容的最佳方法是什么?