libgit2 / libgit2/libgit2sharp
'LibGit2Sharp.NotFoundException: the ProgramData file 'config' doesn't exist' when pushing on MacOS
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- C#
- Star
- 3.5k
- Fork
- 925
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Mô tả
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
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Tái hiện thao tác push trên macOS 15.4.1 bằng mã Configuration.BuildFrom và Push đã cho. Bắt đầu với Configuration.cs:75, sau đó theo dõi Repository.cs:220, Branch.cs:181 và Network.cs:327 để xác định tại sao cấu hình ProgramData là bắt buộc. Hoàn tất có nghĩa là repository có thể push mà không gặp ngoại lệ thiếu cấu hình, với coverage cho đường dẫn cấu hình được báo cáo.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- csharp, git, macos
- Lĩnh vực
- developer-experience
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Cần làm rõ
- Mức phù hợp với người mới
- 30/100