git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: Cleaning up git user-interface warts

From
Linus Torvalds <torvalds@osdl.org>
Date
Nov 17, 2006, 00:39 UTC
Message-ID
<Pine.LNX.4.64.0611161623170.3349@woody.osdl.org>
In-Reply-To
<455CFCBD.8040901@xs4all.nl>
On Fri, 17 Nov 2006, Han-Wen Nienhuys wrote:
> 
> Until that time, it would be good goal to remove all idiosyncrasies,
> all gratuitious asymetries and needless limitations in the commands of
> git, eg.
Well, a lot of the assymmetries aren't actually gratuitous at all.
>  - clone but not a put-clone,

As mentioned, in order to "put-clone", you generally have to "create" first, so the "put-clone" really makes no sense.

The _true_ reverse is really your
 - "git init-db" on both sides
 - "git pull" (your workflow ;) on receiving
 - "git push" on sending.

The fact that we can do "git clone" on the _receiving_ side is an assymmetry, but it's not gratutous: when receiving we don't need any extra permissions or setup to create a new archive. In contrast, when sending, you do have to have that "get permission to create new archive" phase.

>  - pull = merge + fetch, but no command for merge + throw

Again, this is not gratuitous, and the reason is very similar: when you pull, you're pulling into something that _you_ control and _you_ have access to, namely your working directory. In order to merge you have to have the ability to fix up conflicts (whether automatically or manually), and this is something that you _fundamentally_ can only do when you own the repo space.

Again, when you do "push", the reason you can't merge is not a "gratuitous assymmetry", but a _fundamental_ assymmetry: by definition, you're pushing to a _remote_ thing, and as such you can't merge, because you can't fix up any merge problems.

See?

In many ways, if you want _symmetry_, you need to make sure that the _cases_ are symmetrical. If you have ssh shell access, you can often do that, and the "reverse" of a "git pull" is actually just another "git pull" from the other side:

	ssh other-side "cd repo ; git pull back"

Now they really _are_ symmetrical: "git pull" is really in many ways ITS OWN reverse operation.

But "push" and "pull" _fundamentally_ aren't symmetric operations, and you simply cannot possibly make them symmetric. Any system that tries would be absolutely horrible to use, exactly because it would be either:

 - making local/remote operations totally equivalent
   This sounds like a "good" thing, but from a real user perspective it's 
   actually horribly horribly bad. Knowing the difference between local 
   and remote is what allows a lot of performance optimizations, and a lot 
   of security. Your local repo is _yours_, and nobody can take that away 
   from you, and that's a really fundamental reason for why the symmetry 
   cannot exist, and why local/remote operations MUST NOT be something 
   that you can mix without thinking about them,
 - limit local operations in a way to make them effectively unusable and 
   unscriptable.
   You'd basically have to do everything even _locally_ through some 
   server interface, and you'd not be allowed to ever touch your local 
   checked-out repository directly. Again: local repositories really _are_ 
   special, because you can touch the checked out copy. If you try to 
   suppress that, you're screwed.
>  - clone for getting all branches of a repo, but no command for
>    updating all branches of a repo.  

As in sending? Sure there is: use "git push --all". It will push out every branch (and tag) you have. Add "--force" if you want to make sure that it also pushed out branches even if the result isn't a strict superset (of course, the receiving end may actually end up refusing to take it, there's a option for the receiver to say "I will refuse any update that isn't a strict superset of what I had").

If you mean as in "receiving new branches", then yeah, you do have to script it, with some fairly trivial "git ls-remote" to make sure you get the new remotes.

Previous: Carl WorthNext: Han-Wen Nienhuys
Message 179 of 240 in “commit: Steer new users toward "git commit -a" rather than update-index”
  1. commit: Steer new users toward "git commit -a" rather than update-indexCarl Worth, Nov 14, 2006
  2. Andy WhitcroftNov 14, 2006
  3. Cleaning up git user-interface wartsCarl Worth, Nov 14, 2006
  4. Shawn PearceNov 14, 2006
  5. Carl WorthNov 14, 2006
  6. Petr BaudisNov 14, 2006
  7. Carl WorthNov 14, 2006
  8. Junio C HamanoNov 15, 2006
  9. Petr BaudisNov 15, 2006
  10. Junio C HamanoNov 15, 2006
  11. Nicolas PitreNov 15, 2006
  12. Jakub NarebskiNov 15, 2006
  13. Santi BéjarNov 15, 2006
  14. Jakub NarebskiNov 15, 2006
  15. Petr BaudisNov 16, 2006
  16. Nicolas PitreNov 15, 2006
  17. Petr BaudisNov 15, 2006
  18. Jakub NarebskiNov 15, 2006
  19. Karl HasselströmNov 15, 2006
  20. Carl WorthNov 15, 2006
  21. Jakub NarebskiNov 15, 2006
  22. Shawn PearceNov 15, 2006
  23. Carl WorthNov 15, 2006
  24. Steven GrimmNov 17, 2006
  25. Junio C HamanoNov 17, 2006
  26. Petr BaudisNov 17, 2006
  27. Karl HasselströmNov 14, 2006
  28. Nicolas PitreNov 14, 2006
  29. Jakub NarebskiNov 14, 2006
  30. Nicolas PitreNov 14, 2006
  31. Jakub NarebskiNov 14, 2006
  32. Nicolas PitreNov 14, 2006
  33. Carl WorthNov 14, 2006
  34. Jakub NarebskiNov 14, 2006
  35. Nicolas PitreNov 14, 2006
  36. Junio C HamanoNov 14, 2006
  37. Nicolas PitreNov 15, 2006
  38. Junio C HamanoNov 15, 2006
  39. Michael K. EdwardsNov 15, 2006
  40. Nicolas PitreNov 15, 2006
  41. Junio C HamanoNov 15, 2006
  42. Linus TorvaldsNov 15, 2006
  43. Jakub NarebskiNov 15, 2006
  44. Josef WeidendorferNov 15, 2006
  45. Petr BaudisNov 15, 2006
  46. Josef WeidendorferNov 15, 2006
  47. Linus TorvaldsNov 15, 2006
  48. Nicolas PitreNov 15, 2006
  49. Shawn PearceNov 15, 2006
  50. Marko MacekNov 15, 2006
  51. Junio C HamanoNov 15, 2006
  52. Shawn PearceNov 15, 2006
  53. Marko MacekNov 16, 2006
  54. Junio C HamanoNov 16, 2006
  55. Jakub NarebskiNov 17, 2006
  56. SeanNov 15, 2006
  57. Andy ParkinsNov 15, 2006
  58. Linus TorvaldsNov 15, 2006
  59. Michael K. EdwardsNov 15, 2006
  60. Linus TorvaldsNov 15, 2006
  61. Nicolas PitreNov 15, 2006
  62. Linus TorvaldsNov 15, 2006
  63. Carl WorthNov 15, 2006
  64. Junio C HamanoNov 15, 2006
  65. Nicolas PitreNov 15, 2006
  66. Junio C HamanoNov 15, 2006
  67. Nicolas PitreNov 15, 2006
  68. Karl HasselströmNov 17, 2006
  69. Linus TorvaldsNov 15, 2006
  70. Carl WorthNov 15, 2006
  71. Shawn PearceNov 15, 2006
  72. Linus TorvaldsNov 15, 2006
  73. Nicolas PitreNov 16, 2006
  74. Linus TorvaldsNov 16, 2006
  75. Nicolas PitreNov 16, 2006
  76. Michael K. EdwardsNov 16, 2006
  77. Andreas EricssonNov 16, 2006
  78. Carl WorthNov 16, 2006
  79. Michael K. EdwardsNov 16, 2006
  80. Carl WorthNov 16, 2006
  81. Junio C HamanoNov 17, 2006
  82. Carl WorthNov 17, 2006
  83. Johannes SchindelinNov 17, 2006
  84. Junio C HamanoNov 17, 2006
  85. Shawn PearceNov 17, 2006
  86. Junio C HamanoNov 17, 2006
  87. SeanNov 15, 2006
  88. Jerome LovyNov 21, 2006
  89. Theodore TsoNov 16, 2006
  90. Andreas EricssonNov 16, 2006
  91. Linus TorvaldsNov 16, 2006
  92. Carl WorthNov 16, 2006
  93. Linus TorvaldsNov 16, 2006
  94. SeanNov 16, 2006
  95. Anand KumriaNov 16, 2006
  96. Junio C HamanoNov 15, 2006
  97. Theodore TsoNov 16, 2006
  98. Junio C HamanoNov 16, 2006
  99. Alexandre JulliardNov 16, 2006
  100. Petr BaudisNov 16, 2006
  101. Alexandre JulliardNov 16, 2006
  102. Jakub NarebskiNov 17, 2006
  103. Alexandre JulliardNov 17, 2006
  104. Jakub NarebskiNov 17, 2006
  105. Han-Wen NienhuysNov 16, 2006
  106. Jakub NarebskiNov 16, 2006
  107. Junio C HamanoNov 16, 2006
  108. Han-Wen NienhuysNov 16, 2006
  109. Junio C HamanoNov 16, 2006
  110. Junio C HamanoNov 16, 2006
  111. Junio C HamanoNov 16, 2006
  112. Linus TorvaldsNov 16, 2006
  113. Junio C HamanoNov 16, 2006
  114. Han-Wen NienhuysNov 16, 2006
  115. Junio C HamanoNov 16, 2006
  116. Han-Wen NienhuysNov 16, 2006
  117. Han-Wen NienhuysNov 16, 2006
  118. Jakub NarebskiNov 17, 2006
  119. Han-Wen NienhuysNov 24, 2006
  120. Jakub NarebskiNov 24, 2006
  121. Johannes SchindelinDec 5, 2006
  122. Junio C HamanoDec 5, 2006
  123. pretty-formats: add 'format:<string>'Johannes Schindelin, Feb 23, 2007
  124. Han-Wen NienhuysFeb 23, 2007
  125. Johannes SchindelinFeb 23, 2007
  126. Robin RosenbergFeb 23, 2007
  127. Johannes SchindelinFeb 24, 2007
  128. Junio C HamanoFeb 23, 2007
  129. Johannes SchindelinFeb 23, 2007
  130. Junio C HamanoFeb 23, 2007
  131. Johannes SchindelinFeb 23, 2007
  132. Linus TorvaldsNov 16, 2006
  133. Han-Wen NienhuysNov 16, 2006
  134. Linus TorvaldsNov 16, 2006
  135. multi-project repos (was Re: Cleaning up git user-interface warts)Han-Wen Nienhuys, Nov 16, 2006
  136. Linus TorvaldsNov 16, 2006
  137. Junio C HamanoNov 16, 2006
  138. Linus TorvaldsNov 16, 2006
  139. Shawn PearceNov 17, 2006
  140. Linus TorvaldsNov 17, 2006
  141. Carl WorthNov 17, 2006
  142. Shawn PearceNov 17, 2006
  143. Carl WorthNov 17, 2006
  144. Shawn PearceNov 17, 2006
  145. Marko MacekNov 17, 2006
  146. Junio C HamanoNov 17, 2006
  147. Junio C HamanoNov 17, 2006
  148. Shawn PearceNov 18, 2006
  149. Junio C HamanoNov 18, 2006
  150. Shawn PearceNov 18, 2006
  151. Johannes SchindelinNov 16, 2006
  152. Junio C HamanoNov 16, 2006
  153. Johannes SchindelinNov 17, 2006
  154. Linus TorvaldsNov 16, 2006
  155. Linus TorvaldsNov 16, 2006
  156. Johannes SchindelinNov 16, 2006
  157. Linus TorvaldsNov 17, 2006
  158. Carl WorthNov 17, 2006
  159. Johannes SchindelinNov 17, 2006
  160. Petr BaudisNov 17, 2006
  161. Johannes SchindelinNov 17, 2006
  162. Han-Wen NienhuysNov 16, 2006
  163. Han-Wen NienhuysNov 16, 2006
  164. Jakub NarebskiNov 17, 2006
  165. Linus TorvaldsNov 16, 2006
  166. Junio C HamanoNov 16, 2006
  167. Linus TorvaldsNov 16, 2006
  168. Junio C HamanoNov 16, 2006
  169. Linus TorvaldsNov 16, 2006
  170. Carl WorthNov 16, 2006
  171. Johannes SchindelinNov 16, 2006
  172. Linus TorvaldsNov 16, 2006
  173. Han-Wen NienhuysNov 17, 2006
  174. Junio C HamanoNov 17, 2006
  175. Han-Wen NienhuysNov 17, 2006
  176. Petr BaudisNov 17, 2006
  177. Carl WorthNov 17, 2006
  178. Carl WorthNov 17, 2006
  179. Linus TorvaldsNov 17, 2006
  180. Han-Wen NienhuysNov 17, 2006
  181. Michael K. EdwardsNov 17, 2006
  182. Michael K. EdwardsNov 17, 2006
  183. Junio C HamanoNov 17, 2006
  184. Michael K. EdwardsNov 18, 2006
  185. Jakub NarebskiNov 17, 2006
  186. Petr BaudisNov 16, 2006
  187. Petr BaudisNov 15, 2006
  188. Nicolas PitreNov 15, 2006
  189. Linus TorvaldsNov 15, 2006
  190. Nicolas PitreNov 15, 2006
  191. Anand KumriaNov 16, 2006
  192. Junio C HamanoNov 14, 2006
  193. Junio C HamanoNov 14, 2006
  194. Nicolas PitreNov 15, 2006
  195. Junio C HamanoNov 15, 2006
  196. Shawn PearceNov 15, 2006
  197. Junio C HamanoNov 15, 2006
  198. Johannes SchindelinNov 15, 2006
  199. SeanNov 15, 2006
  200. Nicolas PitreNov 15, 2006
  201. Junio C HamanoNov 15, 2006
  202. Andy ParkinsNov 15, 2006
  203. Junio C HamanoNov 15, 2006
  204. Nicolas PitreNov 15, 2006
  205. Carl WorthNov 15, 2006
  206. Junio C HamanoNov 15, 2006
  207. Carl WorthNov 15, 2006
  208. Petr BaudisNov 16, 2006
  209. Robin RosenbergNov 16, 2006
  210. Petr BaudisNov 16, 2006
  211. Han-Wen NienhuysNov 16, 2006
  212. Andy ParkinsNov 15, 2006
  213. Jakub NarebskiNov 15, 2006
  214. Andy ParkinsNov 15, 2006
  215. Karl HasselströmNov 15, 2006
  216. Andy ParkinsNov 15, 2006
  217. Nicolas PitreNov 15, 2006
  218. Junio C HamanoNov 15, 2006
  219. Nicolas PitreNov 15, 2006
  220. Karl HasselströmNov 16, 2006
  221. Alan ChandlerNov 18, 2006
  222. Junio C HamanoNov 15, 2006
  223. Andy ParkinsNov 15, 2006
  224. Petr BaudisNov 16, 2006
  225. Andreas EricssonNov 15, 2006
  226. Jakub NarebskiNov 15, 2006
  227. Petr BaudisNov 16, 2006
  228. Petr BaudisNov 16, 2006
  229. Junio C HamanoNov 16, 2006
  230. Petr BaudisNov 16, 2006
  231. Junio C HamanoNov 16, 2006
  232. Petr BaudisNov 16, 2006
  233. Junio C HamanoNov 17, 2006
  234. Han-Wen NienhuysNov 17, 2006
  235. Alan ChandlerNov 18, 2006
  236. Junio C HamanoNov 14, 2006
  237. Shawn PearceNov 15, 2006
  238. Richard CURNOWNov 16, 2006
  239. Johannes SchindelinNov 16, 2006
  240. Petr BaudisNov 16, 2006

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.