Hash :
d54c34a7
Author :
Date :
2018-05-21T17:04:11
docs: added note regarding difference in treatment of junction points from git
In some instances, the functionality of libgit2 deviates slightly from Git. This can be because of technical limitations when developing a library, licensing limitations when converting functionality from Git to libgit2, or various other reasons.
When asking Git for the absolute path of a repository via git rev-parse --absolute-git-dir
, it will output the path to the “.git” folder without a trailing slash. In contrast to that, the call git_repository_path(repo)
will return the path with a trailing slash:
git rev-parse --absolute-git-dir -> /home/user/projects/libgit2/.git
git_repository_path(repo) -> /home/user/projects/libgit2/.git/
The same difference exists when listing worktrees:
git worktree list -> /home/user/projects/libgit2
git_repository_workdir(repo) -> /home/user/projects/libgit2/
In libgit2, junction points are treated like symbolic links. They’re handled specially in git_win32__file_attribute_to_stat
in src/win/w32_util.h
. This means that libgit2 tracks the directory itself as a link.
In Git for Windows, junction points are treated like regular directories. This means that Git for Windows tracks the contents of the directory.
# Differences from Git
In some instances, the functionality of libgit2 deviates slightly from Git. This can be because of technical limitations when developing a library, licensing limitations when converting functionality from Git to libgit2, or various other reasons.
Repository and Workdir Path Reporting
-------------------------------------
When asking Git for the absolute path of a repository via `git rev-parse --absolute-git-dir`, it will output the path to the ".git" folder without a trailing slash. In contrast to that, the call `git_repository_path(repo)` will return the path with a trailing slash:
```
git rev-parse --absolute-git-dir -> /home/user/projects/libgit2/.git
git_repository_path(repo) -> /home/user/projects/libgit2/.git/
```
The same difference exists when listing worktrees:
```
git worktree list -> /home/user/projects/libgit2
git_repository_workdir(repo) -> /home/user/projects/libgit2/
```
Windows Junction Points
-----------------------
In libgit2, junction points are treated like symbolic links. They're handled specially in `git_win32__file_attribute_to_stat` in `src/win/w32_util.h`. This means that libgit2 tracks the directory itself as a link.
In Git for Windows, junction points are treated like regular directories. This means that Git for Windows tracks the contents of the directory.