我想做的事
我有一个包含敏感数据的文件,所以我不想将此文件的内容推送到远程服务器。
我做了什么?
为此,我在文件为空时进行了提交,并将此空文件推送到服务器(GitHub)。然后用敏感数据和应用的git update-index --skip-worktree path/to/file
填充文件。但是我没有做任何 promise 。
现在,我正在尝试切换我的分支,但出现此错误:
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
为什么要使用skip-worktree
INSTEAD OF assume-unchanged
?我阅读了有关此主题的一些SO问题,并找到了Borealid's answer。
之后,我找到了Jeff's question和VonC's answer。 Jeff的问题与我的问题几乎相同,我遵循了VonC的解决方案。但是,这对我不起作用。也许是因为git版本不同。因为这个问题来自2012年。我们与VonC进行了交谈,他说这是一个新问题,因为他不记得答案了。
我尝试一起使用
--assume-unchanged
和--skip-worktree
,并软重置工作树。但是什么都没有改变。所以?
您能帮我解决我的问题吗?
谢谢。
最佳答案
我还没有找到一个整洁的解决方案,所以我正在使用.bat
文件在受影响的文件上运行--no-skip-worktree
。然后,我使用stash
,switch分支,stash apply
,然后使用另一个.bat
文件在相同文件上运行--skip-worktree
。
这不是很好,但这是我到目前为止发现的最简单,最快的方法。
更新:
我又遇到了这个问题,因此创建了PowerShell脚本而不是上面提到的.bat
文件。它将提示用户他们要跳过还是不跳过文件。更新两个参数,就可以开始了:
[string]$repoPath = "C:\Fully\Qualified\Path"
[string[]]$filesToSkip = @(
"Local/Path/To/File.txt",
"Local/Path/To/OtherFile.txt"
)
$skipText = Read-Host -Prompt 'Skip files? (y/n)'
$skip = $skipText -like "y"
cd $repoPath
foreach ($file in $filesToSkip)
{
if($skip)
{
Write-Host "Skipping" $file
git update-index --skip-worktree $file
}
else
{
Write-Host "No-skipping" $file
git update-index --no-skip-worktree $file
}
}