我想做的事
我有一个包含敏感数据的文件,所以我不想将此文件的内容推送到远程服务器。
我做了什么?
为此,我在文件为空时进行了提交,并将此空文件推送到服务器(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 questionVonC'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
    }
}

08-27 23:28