libgit2 / libgit2/libgit2sharp
'LibGit2Sharp.NotFoundException: the ProgramData file 'config' doesn't exist' when pushing on MacOS
まだ誰も着手していません。
- 主要言語
- C#
- スター
- 3.5k
- フォーク
- 925
- PR マージ指標
- 30日以内にマージされた PR はありません
説明
Hello,
I am facing this issue on MacOS 15.4.1 Sequoia, Apple M2.
I am trying to push some changes I made, to the remote location but I get the following exception thrown when pushing (cloning and committing the changes obviously worked fine).
There is a .gitconfig in my user home directory with the according user.name & user.email section key value pairs.
Additionally I update the local /.git/config file with these information and manually checked that the file is actually updated.
Is this a bug? And if so, is it related to https://github.com/libgit2/libgit2sharp/issues/2046?
But the more pressing question is, how can I workaround this issue?
Here is the stack trace, saying the config file cannot be found in the program data (which obviously is a windows related naming):
LibGit2Sharp.NotFoundException: the ProgramData file 'config' doesn't exist:
at LibGit2Sharp.Core.Ensure.HandleError(Int32 result) in /_/LibGit2Sharp/Core/Ensure.cs:line 154
at LibGit2Sharp.Core.Ensure.ZeroResult(Int32 result) in /_/LibGit2Sharp/Core/Ensure.cs:line 172
at LibGit2Sharp.Core.Proxy.git_config_add_file_ondisk(ConfigurationHandle config, FilePath path, ConfigurationLevel level, RepositoryHandle repo) in /_/LibGit2Sharp/Core/Proxy.cs:line 449
at LibGit2Sharp.Configuration.Init(Repository repository) in /_/LibGit2Sharp/Configuration.cs:line 75
at LibGit2Sharp.Configuration..ctor(Repository repository, String repositoryConfigurationFileLocation, String globalConfigurationFileLocation, String xdgConfigurationFileLocation, String systemConfigurationFileLocation) in /_/LibGit2Sharp/Configuration.cs:line 49
at LibGit2Sharp.Repository.<>c__DisplayClass25_1.<.ctor>b__3() in /_/LibGit2Sharp/Repository.cs:line 220
at System.Lazy`1[[LibGit2Sharp.Configuration, LibGit2Sharp, Version=0.31.0.0, Culture=neutral, PublicKeyToken=7cbde695407f0333]].ViaFactory(LazyThreadSafetyMode mode)
at System.Lazy`1[[LibGit2Sharp.Configuration, LibGit2Sharp, Version=0.31.0.0, Culture=neutral, PublicKeyToken=7cbde695407f0333]].ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor)
at System.Lazy`1[[LibGit2Sharp.Configuration, LibGit2Sharp, Version=0.31.0.0, Culture=neutral, PublicKeyToken=7cbde695407f0333]].CreateValue()
at System.Lazy`1[[LibGit2Sharp.Configuration, LibGit2Sharp, Version=0.31.0.0, Culture=neutral, PublicKeyToken=7cbde695407f0333]].get_Value()
at LibGit2Sharp.Repository.get_Config() in /_/LibGit2Sharp/Repository.cs:line 323
at LibGit2Sharp.Branch.UpstreamBranchCanonicalNameFromLocalBranch() in /_/LibGit2Sharp/Branch.cs:line 181
at LibGit2Sharp.Branch.get_UpstreamBranchCanonicalName() in /_/LibGit2Sharp/Branch.cs:line 155
at LibGit2Sharp.Network.Push(IEnumerable`1 branches, PushOptions pushOptions) in /_/LibGit2Sharp/Network.cs:line 327
at LibGit2Sharp.Network.Push(Branch branch, PushOptions pushOptions) in /_/LibGit2Sharp/Network.cs:line 299
at versioning.MainPageViewModel.CommitAndPushVersionChanges(String repository, String branch, String jiraIssue, String username, String token, String version)
Here is my code to update the local config file:
private static Configuration BuildConfuration(string repositoryLocation, string username, string email) Configuration.BuildFrom(repositoryLocation + "/.git/config", userHomeFolder() + "/.gitconfig");
configuration.Add("user.name", username);
configuration.Add("user.email", email, ConfigurationLevel.Local);
Here is the code that produces the exception:
private static void CommitAndPushVersionChanges(string repository, string branch, string email, string username, string token)
{
using var repo = new Repository(repository);
// Stage the file
repo.Index.Add("a.txt");
repo.Index.Write();
var configuration = BuildConfiguration(repository, username, email);
var author = configuration.BuildSignature(DateTimeOffset.Now);
// Commit & Push to the repository
repo.Commit($"Commit Message", author, author);
var options = new PushOptions
{
CredentialsProvider = (_, _, _) =>
new UsernamePasswordCredentials
{
Username = "x-token-auth",
Password = token
}
};
// EXCEPTION IS THROWN FOR THIS CALL
repo.Network.Push(repo.Branches[branch], options);
}
Can anybody help?
Cheers
Samir
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
示されている Configuration.BuildFrom と Push のコードを使用して、macOS 15.4.1 で push を再現します。まず Configuration.cs:75 から開始し、次に Repository.cs:220、Branch.cs:181、Network.cs:327 を追跡して、なぜ ProgramData の設定が必要なのかを特定します。完了条件は、リポジトリが設定不足の例外なしに push でき、報告された設定パスのカバレッジがあることです。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- csharp, git, macos
- 領域
- developer-experience
- issue の種類
- バグ
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 停滞
- 明瞭さ
- 説明が足りない
- 初心者へのやさしさ
- 30/100