-
-
Notifications
You must be signed in to change notification settings - Fork 69
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Separate git directory support #201
base: 1.3
Are you sure you want to change the base?
Separate git directory support #201
Conversation
I was aware of the failing formatting check, but that is existing bad formatting and I was loathe to change formatting outside of code I was modifying myself. |
Can you rebase your PR? thanks |
2694243
to
71b85b8
Compare
if (!preg_match('/^gitdir: ?(.+)$/', file_get_contents($realGitDir . '/.git'), $matches)) { | ||
throw new InvalidArgumentException(sprintf('Directory "%s" contains a .git file, but it is not in the expected format', $realGitDir)); | ||
} | ||
$foundGitPath = realpath($realGitDir . DIRECTORY_SEPARATOR . $matches[1]); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@chris114782 This assumes that the gitdir
is a relative path, which might not be true.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'll try and take a look this weekend, it's been a few months (nearly a year now!) since I looked at this and I need to get my head back into it.
In #200 I highlighted that the library does not support submodules.
This is because in a submodule does not store its .git folder inside the checked out repository, instead .git is a file that has a reference to the actual location of the .git directory.
This is documented here
You can manually reproduce this by doing
git clone --separate-git-dir=/somewhere/else your-repo-url
This PR adds support for such a set up by detecting that .git is a file instead of a directory and attempting to read the path to the real directory from it.