jgit addFilePattern 不适用于我的文件绝对路径

Posted

技术标签:

【中文标题】jgit addFilePattern 不适用于我的文件绝对路径【英文标题】:jgit addFilePattern not working for my absolute path to a file 【发布时间】:2018-02-05 08:58:46 【问题描述】:

jgit 版本 4.6.0 , 爪哇 1.8 , 窗户 10

我编写了一个 java 程序来推送到 git 存储库,因为我想一次推送特定文件而不是推送所有文件。

git.add.addFilePattern(".").call(); 工作正常。 但是

git.add.addFilePattern("D:\\myGitRepo\\files\\file1.txt").call(); 不工作。

“myGitRepo”文件夹包含 .git 文件夹。

【问题讨论】:

【参考方案1】:

总结

方法AddCommand#addFilepattern(String) 的Javadoc 说:参数filepattern 是要添加的文件/目录的存储库相对路径(以/ 作为分隔符)。所以不能使用绝对路径,也不能使用反斜杠\。事实上,你应该:

使用存储库相对路径 使用斜线 / 分隔所有平台上的目录,即使在 Windows 上也是如此

详情

AddCommand中执行call()时,JGit调用PathFilterGroup创建文件模式,在屏幕后面调用PathFilter。从PathFilter,我们可以看到更详细的文件模式定义:

/**
 * Create a new tree filter for a user supplied path.
 * <p>
 * Path strings are relative to the root of the repository. If the user's
 * input should be assumed relative to a subdirectory of the repository the
 * caller must prepend the subdirectory's path prior to creating the filter.
 * <p>
 * Path strings use '/' to delimit directories on all platforms.
 *
 * @param path
 *            the path to filter on. Must not be the empty string. All
 *            trailing '/' characters will be trimmed before string's length
 *            is checked or is used as part of the constructed filter.
 * @return a new filter for the requested path.
 * @throws IllegalArgumentException
 *             the path supplied was the empty string.
 */
public static PathFilter create(String path)  ... 

【讨论】:

以上是关于jgit addFilePattern 不适用于我的文件绝对路径的主要内容,如果未能解决你的问题,请参考以下文章

你如何用 JGit 做相当于“git show tagname”的操作?

JGit 是不是支持 Webhooks?

如何使用 JGit 找到提交的分支?

使用带有 JGit 的密钥安全地访问 Git 存储库

Jgit中'pull'命令的使用

在 JavaGit、JGit 和 EGit 之间选择的困惑