我正在跨不同的 Git 存储库处理多个项目,并且我希望在所有这些项目之间保持一致的 ReSharper 配置。为了实现这一目标,我正在考虑将 ReSharper 配置文件存储在公共 Git 存储库中,并将它们与其他存储库同步。
有没有办法设置我的环境,以便我可以:
将 ReSharper 配置文件存储在中央 Git 存储库中。
将这些配置文件与多个其他 Git 存储库同步。
理想情况下,我想要一个解决方案,每当中央存储库中发生更改时,它会自动更新其他存储库中的配置文件。没有 git 子模块。
没有超级方便的方法,但让我描述一下我们以前的团队是如何解决这个问题的。
首先,我们有一个 Git 存储库(我们称之为
CodeStyle
),其中包含应共享的所有设置:
CreateSymbolicLinkForEditorconfig.ps1
MyCompany.DotSettings
.editorconfig
ReSpeller/de.aff
ReSpeller/de.dic
每个开发人员都会克隆这个存储库,例如进入
C:\source\CodeStyle
。
现在我们有不同的应用程序,都位于其存储库中:
MyApp1
MyApp2
它们将在设置存储库旁边克隆到
C:\source
,为我们提供以下结构:
C:\source\MyApp1
C:\source\MyApp2
R# 设置文件允许您通过相对路径引用其他设置文件。特定于存储库的 R# 设置
C:\source\MyApp1\MyApp1.sln.DotSettings
可能如下所示:
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:String x:Key="/Default/Environment/InjectedLayers/FileInjectedLayer/=15C315CEAAF9FC4EA4785B81F2986594/AbsolutePath/@EntryValue">..\Codestyle\MyCompany.DotSettings</s:String>
<s:String x:Key="/Default/Environment/InjectedLayers/FileInjectedLayer/=15C315CEAAF9FC4EA4785B81F2986594/RelativePath/@EntryValue">..\Codestyle\MyCompany.DotSettings</s:String>
<s:Boolean x:Key="/Default/Environment/InjectedLayers/FileInjectedLayer/=15C315CEAAF9FC4EA4785B81F2986594/@KeyIndexDefined">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/InjectedLayers/InjectedLayerCustomization/=File15C315CEAAF9FC4EA4785B81F2986594/@KeyIndexDefined">True</s:Boolean>
<s:Double x:Key="/Default/Environment/InjectedLayers/InjectedLayerCustomization/=File15C315CEAAF9FC4EA4785B81F2986594/RelativePriority/@EntryValue">1</s:Double>
如您所见,特定于存储库的 R# 配置
C:\source\MyApp1\MyApp1.sln.DotSettings
引用了其他存储库中的共享 MyCompany.DotSettings
。
唯一需要注意的是,您对目录结构做出某些假设和隐式要求(例如,在本地将克隆的代码风格目录从
C:\source\CodeStyle
重命名为 C:\source\CodeStyleSettings
)将破坏这种方法。然而,我们更喜欢有一个共享的 R# 设置文件;因此,这种妥协对我们来说是可以的。
另一种方法是使用 Git 子模块 - 这可以让您摆脱前面描述的隐式设置的目录结构问题。
您可能想知道文件
CreateSymbolicLinkForEditorconfig.ps1
是关于什么的。由于 .editorconfig
允许基于目录的继承(即 C:\source\.editorconfig
将自动应用于 C:\source
中的所有目录),因此我们需要以某种方式将文件 C:\source\CodeStyle\.editorconfig
“移动”到 C:\source\.editorconfig
一个目录,以便所有其他目录repos 可以领取。CreateSymbolicLinkForEditorconfig.ps1
:
If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
{
Write-Host "Running elevated..."
$arguments = "& '" + $myinvocation.mycommand.definition + "'"
Start-Process powershell -Verb runAs -ArgumentList $arguments
}
$sourceFile = "$PSScriptRoot\.editorconfig"
$destinationLink = "$PSScriptRoot\..\.editorconfig"
if (Test-Path -Path $destinationLink) {
Write-Host "File '$destinationLink' already exists"
}
else {
New-Item -ItemType SymbolicLink -Path $destinationLink -Value $sourceFile
Write-Host "Created Symbolic Link '$destinationLink' pointing to '$sourceFile'"
}
希望这有帮助!