@@ -190,7 +190,7 @@ public void SetupGit(GitInstaller.GitInstallationState state)
190190 {
191191 if ( Environment . RepositoryPath . IsInitialized )
192192 {
193- ConfigureMergeSettings ( ) ;
193+ UpdateMergeSettings ( ) ;
194194
195195 GitClient . LfsInstall ( )
196196 . Catch ( e =>
@@ -280,25 +280,58 @@ public void InitializeRepository()
280280 thread . Start ( ) ;
281281 }
282282
283- private void ConfigureMergeSettings ( )
283+ private void ConfigureMergeSettings ( string keyName = null )
284284 {
285285 var unityYamlMergeExec =
286286 Environment . UnityApplicationContents . Combine ( "Tools" , "UnityYAMLMerge" + Environment . ExecutableExtension ) ;
287- var yamlMergeCommand = Environment . IsWindows
288- ? $@ "'{ unityYamlMergeExec } ' merge -p ""$BASE"" ""$REMOTE"" ""$LOCAL"" ""$MERGED"""
289- : $@ "'{ unityYamlMergeExec } ' merge -p '$BASE' '$REMOTE' '$LOCAL' '$MERGED'";
290287
291- GitClient . SetConfig ( "merge.unityyamlmerge.cmd" , yamlMergeCommand , GitConfigSource . Local ) . Catch ( e => {
292- Logger . Error ( e , "Error setting merge.unityyamlmerge.cmd" ) ;
288+ var yamlMergeCommand = $ "'{ unityYamlMergeExec } ' merge -h -p --force %O %B %A %A";
289+
290+ keyName = keyName ?? "unityyamlmerge" ;
291+
292+ GitClient . SetConfig ( $ "merge.{ keyName } .name", "Unity SmartMerge (UnityYamlMerge)" , GitConfigSource . Local ) . Catch ( e => {
293+ Logger . Error ( e , "Error setting merge." + keyName + ".name" ) ;
294+ return true ;
295+ } ) . RunSynchronously ( ) ;
296+
297+ GitClient . SetConfig ( $ "merge.{ keyName } .driver", yamlMergeCommand , GitConfigSource . Local ) . Catch ( e => {
298+ Logger . Error ( e , "Error setting merge." + keyName + ".driver" ) ;
293299 return true ;
294300 } ) . RunSynchronously ( ) ;
295301
296- GitClient . SetConfig ( "merge.unityyamlmerge.trustExitCode " , "false " , GitConfigSource . Local ) . Catch ( e => {
297- Logger . Error ( e , "Error setting merge.unityyamlmerge.trustExitCode " ) ;
302+ GitClient . SetConfig ( $ "merge.{ keyName } .recursive ", "binary " , GitConfigSource . Local ) . Catch ( e => {
303+ Logger . Error ( e , "Error setting merge." + keyName + ".recursive ") ;
298304 return true ;
299305 } ) . RunSynchronously ( ) ;
300306 }
301307
308+ private void UpdateMergeSettings ( )
309+ {
310+ var gitAttributesPath = Environment . RepositoryPath . Combine ( ".gitattributes" ) ;
311+ if ( gitAttributesPath . FileExists ( ) )
312+ {
313+ var readAllText = gitAttributesPath . ReadAllText ( ) ;
314+ var containsLegacyUnityYamlMergeError = readAllText . Contains ( "unityamlmerge" ) ;
315+
316+ if ( containsLegacyUnityYamlMergeError )
317+ {
318+ ConfigureMergeSettings ( "unityamlmerge" ) ;
319+ }
320+ }
321+
322+ GitClient . UnSetConfig ( "merge.unityyamlmerge.cmd" , GitConfigSource . Local ) . Catch ( e => {
323+ Logger . Error ( e , "Error removing merge.unityyamlmerge.cmd" ) ;
324+ return true ;
325+ } ) . RunSynchronously ( ) ;
326+
327+ GitClient . UnSetConfig ( "merge.unityyamlmerge.trustExitCode" , GitConfigSource . Local ) . Catch ( e => {
328+ Logger . Error ( e , "Error removing merge.unityyamlmerge.trustExitCode" ) ;
329+ return true ;
330+ } ) . RunSynchronously ( ) ;
331+
332+ ConfigureMergeSettings ( ) ;
333+ }
334+
302335 public void RestartRepository ( )
303336 {
304337 if ( ! Environment . RepositoryPath . IsInitialized )
0 commit comments