public static string FindGitDirectory(string rootDirectory, bool recursive, bool isBare)
{
string directory = null;
string gitDir = null;
string envGitDir = System.Environment.GetEnvironmentVariable("GIT_DIR");
//Determine which git directory to use
if (rootDirectory != null) //Directory specified by --git-dir
directory = rootDirectory;
else if (envGitDir != null) //Directory specified by $GIT_DIR
directory = envGitDir;
else //Current Directory
{
directory = Directory.GetCurrentDirectory();
if (recursive)
{
//Check for non-bare repositories
if (!isBare)
{
while (directory != null)
{
gitDir = Path.Combine(directory, ".git");
if (Directory.Exists(gitDir))
return directory;
//Get parent directory
directory = Path.Combine(directory, "..");
directory = Path.GetFullPath(directory);
}
}
else
{
//Check for bare repositories
while (directory != null)
{
if (directory.EndsWith(".git") && Directory.Exists(directory))
return directory;
//Get parent directory
directory = Path.Combine(directory, "..");
directory = Path.GetFullPath(directory);
}
}
}
}
if (!directory.EndsWith(".git"))
{
if (!isBare)
directory = Path.Combine(directory, ".git");
else
directory += ".git";
}
return directory;
}