• 【JGit】 AddCommand 新增的文件不能添加到暂存区


    执行git.add().addFilepattern(".").setUpdate(true).call() 。新增的文件不能添加到暂存区,为什么?

    在 JGit 中,setUpdate(true) 方法用于在调用 AddCommandaddFilepattern() 方法时,将已跟踪文件标记为需要更新。这意味着已经存在于版本控制中的文件将被更新,而不是将新增的文件添加到暂存区。

    当调用 git.add().addFilepattern(".").setUpdate(true).call() 时,JGit 会遍历当前工作目录下的文件,并查找已经被 Git 跟踪的文件。对于已跟踪的文件,JGit 将检查其在工作目录中的状态与版本库中的状态是否不同。如果文件的内容发生了变化,JGit 将会将其标记为需要更新,而不是将其添加到暂存区。

    因此,setUpdate(true) 的行为是更新已存在的文件,而不是将新增的文件添加到暂存区。如果你想要将新增的文件添加到暂存区,可以使用 setUpdate(false),或者省略 setUpdate() 方法的调用,因为默认值false

    以下是一个示例代码来展示如何将新增的文件添加到暂存区:

    import org.eclipse.jgit.api.AddCommand;
    import org.eclipse.jgit.api.Git;
    
    import java.io.IOException;
    
    public class JGitAddNewFileExample {
        public static void main(String[] args) {
            try (Git git = Git.open(new File("/path/to/repository"))) {
                AddCommand addCommand = git.add();
                addCommand.addFilepattern(".");
                addCommand.call();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    在上述代码中,使用 git.add().addFilepattern(".").call() 来添加当前工作目录下的所有文件(包括新增的文件)到暂存区。由于没有调用 setUpdate(true),默认行为是将新增的文件添加到暂存区。

    确保在调用 AddCommand 时不使用 setUpdate(true),以便将新增的文件正确添加到暂存区。

    小结:

    1、添加修改的文件或新增的文件到暂存区,使用

    git.add().addFilepattern(".").call();
    
    • 1

    2、添加已删除的文件变更信息到暂存区,使用

    git.add().addFilepattern(".").setUpdate(true).call();
    
    • 1

    3、如果要写一个添加文件到暂存区的工具类方法,可以参考如下:

    public static void add(Git git){
        // 添加新增的文件、文件夹及修改了的文件到暂存区
        git.add().addFilepattern(".").call();
        // 添加原本被跟踪的文件变更信息到暂存区,使得文件在工作空间中不存在
        git.add().addFilepattern(".").setUpdate(true).call();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    c++23中的新功能之十五类tuple类型的完全支持
    如何知道是背包问题
    【Python查找算法】二分查找、线性查找、哈希查找
    reactjs开发环境搭建
    Java ClassLoader clearAssertionStatus()方法具有什么功能呢?
    K8S原来如此简单(八)ServiceAccount+RBAC
    【校招VIP】项目分析之产品的优势与不足
    android RecyclerView列表自动播放实现
    马蹄集oj赛(双周赛第十五次)
    爬虫之Scrapy框架
  • 原文地址:https://blog.csdn.net/m0_47406832/article/details/136351737