2017-08-21 3 views
0

Je souhaite lire le contenu d'un fichier à un certain commit dans une certaine branche: Je suis actuellement, en utilisant ce code pour lire le contenu d'un fichier à un certain commit ignorant la branche. Mon but est d'obtenir le contenu d'un fichier à un certain commit qui est fait sur une branche donnée.JGit: lire le contenu d'un fichier lors d'une validation dans une branche

+0

S'il vous plaît préciser votre question. Quel est le résultat attendu de l'extrait et quel est le résultat réel? –

+0

Mise à jour de la question –

+0

Alors qu'un commit est généralement créé sur une branche, vous ne pouvez pas dire qu'un commit "a été fait sur une branche" après le fait. Des branches peuvent être ajoutées, supprimées, renommées ou mises à jour par la suite. La seule chose que vous pouvez dire est qu'un commit donné est accessible depuis une ou plusieurs branches à un moment donné. Le 'NameRevCommand' liste toutes les branches à partir desquelles un commit peut être atteint. –

Répondre

1

Différent de la branche des outils VCS la plus ancienne, une branche dans Git est simplement un pointeur mobile léger vers l'une de ces validations. Il ne "contient" aucun commit lui-même. En d'autres termes, c'est seulement un simple fichier qui contient la somme de contrôle SHA-1 de 40 caractères du commit vers lequel il pointe. Il y a aussi un exemple très illustratif Git - Branches in a Nutshell:

A branch and its commit history

Comme l'a déclaré Rüdiger Herrmann, tandis qu'un commit est généralement créé sur une branche, vous ne pouvez pas dire que Commit « a été fait sur une branche » après le fait . Des branches peuvent être ajoutées, supprimées, renommées ou mises à jour par la suite. Par exemple, même si la branche ou l'étiquette v1.0 est supprimée, la validation 98ca9, 34ac2, f30ab est toujours là, et accessible par master. Je vous suggère de lire le Pro Git (2nd Edition), Chapter 3.1 Git - Branches in a Nutshell pour plus de détails.

Quant à JGit, voici ma mise en œuvre de chemin de lecture pour une validation spécifique:

private String getContent(RevCommit commit, String path) throws IOException { 
    try (TreeWalk treeWalk = TreeWalk.forPath(git.getRepository(), path, commit.getTree())) { 
    ObjectId blobId = treeWalk.getObjectId(0); 
    try (ObjectReader objectReader = repo.newObjectReader()) { 
     ObjectLoader objectLoader = objectReader.open(blobId); 
     byte[] bytes = objectLoader.getBytes(); 
     return new String(bytes, StandardCharsets.UTF_8); 
    } 
    } 
}