L'amont qualifié de nuisible
Il y a, hélas, une autre utilisation de "upstream" que les autres réponses n'abordent pas, à savoir faire référence à la relation parent-enfant des commits dans un repo. Scott Chacon dans le Livre Pro Git est particulièrement sujet à cela, et les résultats sont malheureux. N'imitez pas cette façon de parler.
Par exemple, il dit à propos d'une fusion résultant d'une avance rapide que cela se produit parce que
le commit pointé par la branche dans laquelle vous avez fusionné était directement en amont du commit sur lequel vous vous trouvez
Il veut dire que le commit B est le seul enfant du seul enfant de ... du seul enfant du commit A, donc pour fusionner B dans A il suffit de déplacer la ref A pour qu'elle pointe vers le commit B. Pourquoi cette direction devrait être appelée "amont" plutôt que "aval", ou pourquoi la géométrie d'un tel graphe en ligne droite pure devrait être décrite "directement en amont", n'est absolument pas clair et probablement arbitraire. (La page de manuel de git-merge
explique bien mieux cette relation quand il dit que "la tête de branche actuelle est un ancêtre du commit nommé". C'est le genre de chose que Chacon aurait dû dire).
En effet, Chacon lui-même semble utiliser "downstream" plus tard pour signifier exactement la même chose, quand il parle de réécrire tous les commits enfants d'un commit supprimé :
Vous devez réécrire toutes les commandes en aval de 6df76 pour supprimer complètement ce fichier de votre historique Git
Fondamentalement, il semble ne pas avoir d'idée claire de ce qu'il entend par "en amont" et "en aval" lorsqu'il se réfère à l'histoire des commits dans le temps. Cet usage est donc informel et ne doit pas être encouragé, car il est tout simplement déroutant.
Il est parfaitement clair que chaque commit (sauf un) a au moins un parent, et que les parents des parents sont donc des ancêtres ; et dans l'autre sens, les commits ont des enfants et des descendants. C'est la terminologie acceptée, et elle décrit la directionnalité du graphe sans ambiguïté, donc c'est la façon de parler quand vous voulez décrire comment les commits sont liés les uns aux autres dans la géométrie du graphe d'un repo. N'utilisez pas les termes " en amont " ou " en aval " de manière approximative dans cette situation.
[Note supplémentaire : J'ai réfléchi à la relation entre la première phrase de Chacon que je cite ci-dessus et la phrase suivante git-merge
et il me semble que la première pourrait être basée sur une mauvaise compréhension de la seconde. La page de manuel décrit une situation où l'utilisation de "upstream" est légitime : l'avance rapide se produit souvent lorsque "vous suivez un dépôt amont, vous n'avez pas commis de changements locaux, et vous voulez maintenant mettre à jour vers une révision amont plus récente". Donc peut-être Chacon a utilisé "upstream" parce qu'il l'a vu ici dans la page de manuel. Mais dans la page de manuel, il y a un dépôt distant ; il n'y a pas de dépôt distant dans l'exemple de fast-forwarding cité par Chacon, juste un couple de branches créées localement].
18 votes
Il y a deux contextes différents pour l'amont et l'aval dans git : remotes, et time/history. En amont/en aval par rapport aux remotes, le repo en aval tirera du repo en amont (les changements circuleront naturellement en aval). L'amont et l'aval par rapport au temps et à l'histoire peuvent prêter à confusion, car l'amont dans le temps signifie l'aval dans l'histoire, et vice-versa (la terminologie de la généalogie fonctionne mieux ici - parent/ancêtre/enfant/descendant).
7 votes
En rapport : Que signifie "en amont" ? à l'OS
6 votes
En rapport : Différence entre l'origine et l'amont sur gitHub