From ed68918aa404aae91b4252cac5ad537ddccadcd3 Mon Sep 17 00:00:00 2001 From: Ian Carroll Date: Thu, 31 Jul 2025 19:08:57 +0000 Subject: [PATCH 1/3] revised --- book/_toc.yml | 1 + book/img/git-gui-credentials.png | Bin 0 -> 17798 bytes book/preliminary/git.md | 100 +++++++++++++++++++++---------- 3 files changed, 68 insertions(+), 33 deletions(-) create mode 100644 book/img/git-gui-credentials.png diff --git a/book/_toc.yml b/book/_toc.yml index 4b41246..e52de32 100644 --- a/book/_toc.yml +++ b/book/_toc.yml @@ -13,6 +13,7 @@ parts: - file: preliminary/what-to-expect - file: preliminary/code-of-conduct - file: preliminary/checklist + - file: preliminary/git # - file: presentations/hackweek/cryocloud_overview/CryoCloud_demo # title: CryoCloud Overview - caption: Presentations diff --git a/book/img/git-gui-credentials.png b/book/img/git-gui-credentials.png new file mode 100644 index 0000000000000000000000000000000000000000..736182e15c719a6d475e417f0ce39d22e3cdcddd GIT binary patch literal 17798 zcmbunby!qU_%#ZMGIU9IE1lBaElPKXNOwzv(%m2_(nxoABOu)<-5q{={N;1Mf9`Xy z&oj=+Vq;Po~K7UmgvhlQTc zf%~tLu$(#1{`)huCXDENaamdL{@%pV%*@uw($2XHzTgw6IBTV<>8z=!z-MA-!)#<~ zXKcpoZetIv0wdtg2R_=EIUA9?+kCWj;&T_I{8xexe1;xop(OuT#MxSqQd99QxwxI9 z8TlJ#R%TX8AtZ8gasfwEbG~;HQvX>Ud=sR!bauAqV_|V~b7OYnV77C#U}59s_@~dO#mS>|ERe|H}Vg zXa1+h|5a1-e`<2D^8D|b|Le^Ev!Zw-9b`o%OupRSupr@DtpC!wQ$syJHKY`+SaF=zvwx!uh!}Kjafd zj2T4r+uN_2OrMjZPb3^Vhv@eu8697vVtr97pS6+}@4y%khQ}Jcb?<>k>h$h(79~ZB zPv4om5VIu2XXM1k4HD3IXSHK(&7vDhRw7ii{#OGHK0yJiR%*Iu12z(QXU=(@r|Z_T zft0JX+8l+<1cwx5+Ud+nAN7li0*zv+H?BDZA8tNUMD};xPH09#PE9{yzY8lfez`-? zZIF~9kIGFN=YU=NW8EQjpIeInTU;Lsz134nuyziGAtV72PBczdRkX!}WJEd5u<0`n zgA`7&!@7X3wJv7-57EFEziM^lFvY<*?Aa4<*Slipr|hjmLGSo* zRT!Us1PJ+Py=0~Q@;ot^0CZ3eO5&V;C8*jSI?>`sg%yW^56I|kv~zqxg+dP|loj6b zxj(tvZG{a6e#AiHm?pGLjy>kv_t@~Pygp=Uv0CdZFK3;^$&)c5j>#>dg|MC@+hbab z|B7L}9orb__p6%KUwoC3-r@NHvV{y6lhRg45hT^mNp8Sr^~eg3;@>4E!aFiI@u%$t zF7C@&9q4^j1H&+*wJ49utz86zfcHM70F>bSDPgn}z(SlhuglrMQ4e5zla;|Xx&?OSHt^kMNG2f!aOTwD*prX*$IQ^TK zY8=>Y#_h^)lCY>Fvwb?v|Aq#kgt2%oJ4#n$NXgF)4-S#fVSHNhj*my4o^Z5*l(mM4 z7*XZ46fBt$Y8$Phg8`7+VSM`eV1V?hdt33ilnM;sEd~U>Q69qdM|Id7-uHGp`J=7A zdi`kS7eRp#`H#AeG^&FN|EBAcl=*iKoqAgryOz_C=KG`OC3vNp3BHdQiQLwM!i$bQYSmvBH*rWUzJT zJxL3D)9CE5epN1WIEhKV#CC{b|4q?M&O0UIwj#O4n{ONJY)>jUxD(HpdZUzy&4`*6 zt}|tQb_91(J`!2I!n!;(fvZVH1b+AHN*^+FVWt*9DI|2&?i< z!WZg$>`zbX&pvh$j4C?*?xBkoZoP*O9DDm`Q(B;$0{z(T)=T zA*b6fqtNhX(S6wv|3V^O$NcCSOle{Yv(Ypz`JorcICq{qsTO+$eh+i)Pc&A8f$+z# z%jNSjccX+a(_WInstMJ=XDfDLrsdQ`-#DENi{LjOHCc~rOj18RUAOl~Y=#(7&Xj6R zFN2AC_d-IgOuIH^7jerf3h_(ba}N=@_eDxBWZozK{7*NV!6E@Rx7}n<mF?^^(cFQPTI=PJ9(N z6=HlQ@&Y{b6?sYnL9)-QT5dMJY{bmf{0tV!wY1{7vqC>?+b?f^*CkOaz$raI%zNB& zzGT~cxU=GOt!G808AZq?x6x&g?R^$b#A^8Ir^kL-{ZMyUD0WayHyZyymlBWi$(^0w zefpN*{lO2tuzrz6*hGRaTlURGUNzaWx#7 zr|7d*zk8)&j=Dl=H_DnMThvO!eph^U$DaJcpmS7&2lU7 zE@A(@vLKfgFNpuG`95p@2)R?9B_&u-fAXT`8Vb(`7&a7rg%8iig;{o=Zu*6#TGCh1 z{kCGIsh6l|5YJ_l$^~uMHms6-`Ns3(?e7k6AE}o(=BP)euP8}lZ>Hb`QZiomC^A_%muXnnI0o06UUq$ts08JIg^-h@!~Y&|89PKZr3>P?~GS|*lCCXPOZkh zhcRE5$vG^>5;lKl`!P$`Fx8MI(kiAk$TK%eux!itVb)aXxz0m~g{@39xqm$+K3#q;NykyB^Q*=DjMA`jT8V#C3rMT=~oE$6F)c|vMwT7(LtZ#k%JTHRZ@ zr^Td+JyWN}LBk<8F~iKw3f_{P?&^^1MLS^+d`rEm6O_v)Ft2_y3fhfkegGyDTG zBYu#qT=q(uMlI@4k1VOOJ6CQ^a2q+#OyJ|!$dtA4AT=vovl|iG7(#On7TzB@7}hg< z`X0r`Ik##hGuBatB=Qrs4p$6=F|;?|rAq})yWZJY@NJS+Fe9@Nz%7!9(J;_$FD)5n zVQWpDtD^sX_eo7O>mo(3rR!5Rb^OZC1gWP_e{!r`Q_Y&hbV>+$QEpELm7((|49F6O|@9-*MFLtNt%!N?5E>RU2 zg);K0L|a-`I(m5jKAh9ME~GQPm=H%F6npk4!LXHxe1}cVoN?DO*B3-hf`8C*J|iEbbnIf}>>j#zQ5r9!fRNc~dx5jhQQfqG@I3#HTBEUuS|(_2_P1SK|6P#;B& zPH5qIQ10a)B=ZL5@>UHYY9{PoUV7qbpI(2d8~jpCzfwZ7aUD=PQ?uFnTH)0AX4F(r#QL5)Oa>?{B9(2FlC*B7Oqy&}Lg^YUk5l&}2 z7e|QZ);-_+kB5bEb?m)#hZnly4l=rd5Lh%ZMQ4~UDdn@`WJih`;>Jw3c1wh^H)ip? z`x#XTc7Fyo4i?o=<0z1ujSOr+s8tr?=wA$yQZF#~H8ng=vm2AV|Mv`*kRr=ReX=yW zV}NDx=)-#+$36KDWRoDZ5P+{16KBw$W=f`5>q+R*P){qYSWn}J1eFcF5*yC6)s#o| zw}BX{pN$jIhQL5l2Cc6Bp&1b>oS3CiEt8$61qmBS*aAdA!p2z>fN#5>Pw^HXg8vn# zk4J|E6`bgRl#z$b^I1V&zJQam3}zdfl^4$;$6ys>2s5fvB7_U}|AeV+6!GJ73gZ<7 zK4JpNIHfEeWJTnLLF)LMA6q%$k>FsdK-1>`Z<`+A`FdL4bKH8ZAB(sfyV;s%SX^Kc1qz>{ma`Ow$ow&>q;B{l68)^Je>^9k<8;+F zz9xMmis)OYoSlUw_L02H)x44Xp-7Nlvdo~pt!I>k&-vT^xZe}Dn$q{hzA8ZyFPMCW z1A*SZkyTV`Y znSO|p$ht0W1DZt6bF$kjPdFL%$2$Aw2C_OxX|v@vv2UH(jn3c0QN)VC9`Hp85n z7Am+JMw_`-1x|y+kjbUWY2xvE_4qd(+2WxJo{eb0t}^fTOK#5#OT^z_6a(g+Q)+6Y z>vg8#2N#Bt+-s5_9$S~|ots-1ZJQPA8cmw{7s3$vt!EkM3gq#av|R-#qkOOS=UB`Q zWLxal#n{wjrSB}VJo;F~m4D%Z8#Qz%$v1~cjK^x;PmQaghDF2q)?An zKCJ^Ofn-Z72h|F>R7<1<)ylL&*X1zBe7?8cl$7~c1}MCg(A2s-LK9xsyJ*6}?sl{U z*=-%Qrh4`QC2S;1kbeU+BH=i-Bkn0l$2Rs#F^yC9ZYMUNCmvU}pe(|_e$H}h!MY;S z`DjV&%tNONjFFTo3laYmBDj%CGNo}B;?7-CLLp*C!Uu8{=;4P?PKy zZEnFLIm_VppYx}BuypvoySb3$38n?2@uePu+ zh))T{Q9=Gx`2GwxlxbO2*AM`aTl2Sh{GJ{LTCZ0a<|1Bi!p&wei1($Q=9G~Z%WCbe zaL2tqNj&lq@vMZUvb(+-80B7NJTxMXuT{GrP4OhML#DkTSQpwMJ*j&Y;r^sp9N1R) z-WJ2}*ogMJUl__K-D?y}C~`8oUdoOX zB4e1eyhij1&t*M#QoR452L`YXzGBH@Wg8d|QZqVpM{{eWW-ACRz5|xyJT_VW2o)rduS<3Sko zR|K+yo>igsL+b4Hya!P%CEY6sAyba;I&x>ygzp;GLuOoDJlJ8K;>hYi zc9G9^iDx&tp1~W_SVb&P_fYs6G56YB0L6HHToA=ppap|8moEz|=9z(!*svVg0!VOo z8Om=KS+|W5cgO-#`^tYoe90tykipuMxUXsO?P#k+qaurJxm1heZ$|tYX-2-Z65lR0 z@0p~}M`w8*o@-kSVP^L%IUOQS%eCJ#f+V$Mz7i4G3X#HpZ^x@)Fe9#x`YF?KSHXHx z{Y-$C*u`+cGcC3~-JR9%WGS7eT=EO9$~KqH!cPyvjBG~C*)*B{aBJnf1Vh0OX=~pr zZ81vu`}bE0)JoK6wu}Q*Z0+qd6a|R( za8JVKaJDSHLFQL@)_u4&?s&kqRbyw~%J3=cM2+af{OU`mRVtO!_$U(o*+>Eosra3( zDqTofz6_fR=5iCtsu&=lrkU$h@}wN6-50_PX7^@F%&>YEa$G_B6vroE(|=eqt)z0f zPA0DD@{Z2a{`vQOo5=5s&i;Qt6Q#`=U9EW8@m9wX%aa@6VrzQ%Y({c#8BG9M?3JHx zsdtQ%JI!6XU0XQiiRLXBA=RqRe@sH>Ty{)z&nTnu7CTK!Dtu`ADsthz$*S=QF zy%!-Opf=m<_45LJO0(+1o|W7N`h|j5sPeDrpuC4fZ3OAV_w?H@&UZbIS6WFft0wyJ z>#e4x@*K}Js|2)1r#P@#Z*Bo|_x=Nt_H%B2>YmwS9%%yS@rxJ@Z2Op8mwd|m!}{zc zLrd-~q+@~jeh+hlggjwQv<0HeRp0x=v2&fU7b1FD%Hw{m{&hK{_TuqM1^G7HgZsC) z`MSjYqLT&QuJWO#q@I7i8rJxgD;bc&08;DRZbj8q%Wk!;_1xR5`lf?{JWF;9{NNh% zCH`oTZo-QNMrb{JGITimkrH>rKpT-4g}e#DtaR@%{v>C$!X19}tSq`!OpxsBChXv2 z=OhQeUUgku^mDxN{@rh(p|*^XRpz5GvEqb_86Pi^-L{5TD0FTsdG~(6D7{zw#fqOdGv%1$@#*l+c}JJ4r_V zw7N|_>C8xhk^&xTkuK}xP@8XR@3)B{VYn)o^Pi^3#@uPkK<@%=iC z4hlT>FHGz(CG6*#IBmX#H6;7oT{u8FvgWNg`5;{neD^jn4KQ{}kD7y%*q{jHl3D?Y zKgihF2U=X}vcKCV1w0k5g~-V&G?!fF^o~Ft;4&_BUrHq4UMc=VepbD&0?@NZ-}0gy z?~mKtOyy=PCs7qv{v=fL#VnQH8~Hgwia_nA-){Qz_O2I269p;iU2 z?(#@`f_%|{M@3az9^p9*N?%P<%|=?wn~Ti*kWE*qfv;Kc2+HZ1VIrK0xhB;_bQ#<# zcM=W>@0aS>El&p`9A{A01ya9Nyw+;cJS~tlPf%``o60gI!ZtD>1y7DI%?Im=YrF%4 z8v*rftVE)b=;-9@g%+H*{rpk4a%l7H5|Th?8@w9z*hF;k%+>wz$l zNlo6xs6pJ1Ma|W`Hn?6KvNhOavFI@eOM9(36>ra~|Ksn)0BQ|}sgj3E0D1t3I=UT{ zZUc;rA=Uw5f)CRp1nS5UrD0G~vxx;0;PU-30G_1~IhcY93wQvcE|KtCHv(`R1i&pa ztZ_1^8`BIL-9GxIH4Nkr@*t5uzt<-R7qv%yzmppkb?P6Bw7vw_dUNzh)mDasWJai z)ZiWeHz>sXMJiYEwysOGQme2wD-@Osh<4o5y{dOW&Mbb%tghL|#o6>3lsc3-l(G~t zHim2=z_okDrEG3fY>Qc@q~@kNFh=X^WI_`IT8M;i_Tu)oT(#O5JApdGPjHn(&%jll zi7fANg0|U30kT&xtQCU_I|5KVkN&ev2~6HAY%qC4@c&iC-%)E@;it;gfhiHQD~yKG zB4^k9`MdfM6Bb3+GNU=7H?e>kE~ic2WNCk(yypZ9r|6r~9D!xZ$TN*{-Piy4zF5IPF?T^O{TD~xk%sGvGQUk~hcm@=LNlL~A&K2gRV4ic4AT(T?yD<|u2QWZ#8yx;*9~OL_i8!4RZiSJdCevjfGKyy zmJSTydF=+UN4eGybF^y7AN$9Ls%WCQyinfP)!O2>>oPhfQ=})9GUqnwLzzFvU^n5m z8JcwDwq1Hf^sN1A!CK6`=ZDT!S1@uxYYdOiMBOcFJvO-EVc{ZUw-Y}6xj;)y` zNTM&mU~CCri^)8igF$-VaP;?%wnd+p-_j&hKdlD8v&j4 zKoezRM*QLZO{1#5&!yUF;@4gr>4^?KQ&{2XMb2IbNfEH zYmJ(AoV?F;9D2R6_B(Ax?7;$?Rv{+3?agGHk5{gbiqkkcB=Zkk5Ge?*^oQD9-%0dk#yQpr8mraO){+cA$`(*nlYa$6`>le3p_mvnUFxhG*SHLO(2A& zcpe$&m-=mfyxt&7Yv^m{(HPB}MsgSu+3fU3C+Ni`nb|EA4~h^Pc-OZ zJpqwmFISY$1G}L2quEz~Av&r>iEYgcinscZO3te<*9g(bt(VpB$+Xv!R+qmkqz5?q z`=#BEv+Z+o9tsv}GX8Grb1DV7VGJ~0 zPZ(cx2K*C~F~GulAO#i3TfpMWWEV2U2VEkzH^fa!7(A-7Oj^`niHM-_OAsC`-Xo`H zF^&|RSBHyrGc(8O1qssQ|FJ;3z`s>Z`FA=3n~a>r0Ubc#r!vPR^dt2W zu&gG)g0N@?^Bo5o*1#D|?b|imT4?YjfKoayaD?$RS5nTbkwi4`J>9(yU=4yO8Q2#vp6L1l9WS;le?9lMjmOg&HK3C;$X_ z-)$Dj1@40cxC$Dv{tal|B2Z}f#2!#XD?U%RzoXQ0#NwSZdRBd|GuKot@wNQqL%?JV zp2+iGgOp%tT3Hz6Haf|!E4rgF;phbHJxm5|0^7_W@7J-H;|-+YgcpF`?>DcU;3w+Z zfd0o`(NE6`&;Dd=!#*%qsCGzTL#(A zGIR662H~5Je_VeVA;_MCP8$;$G@1mjeszy#3mXi5m@r%nL6uKpboi;#>gl45{Kx?^dJng$A^TNORqWkkePt&c;%$LPgChD~74nei8Uv`au zqyDYZCz-U*a57gCYh3fKG{`n;J+Hgbg&{A%`WN@mbMES{`Oha{+>3-*SQcRd#Hg(_ zp1u^5(l_wKQ>TS!eT0*hn%AHD4uSY>yuwkqLg^!Px-{v0JC4%8=b+P{W5Tv6?<4CdG_lk=i zT;+4FXX@Z zG*BN+3tSGsPy1+uV>}@_i!GGQV+%7pw5Q{9XdhUuUiF*JVd zYST*hSpupD>tf>zOA|E6VJq>7`aVesyAaEC1b%tbnqX1MUgEnmZ)#aQ4o>(_^zz9^l zp`Z)f1j4*SJe@KwYJ>pfa30L)V>p6`Vg`?jOe9^q(h6{b=yQtKd;{L6MqnHfrV-1F zjL`xd$`X{|C)^7{#Lh=s_?0V(yvq=TBvgZ^h#Zj4X%z=72k*PwAm zC@wamg;z#X*u?KVE@w3OIf-QuOND?yFPL>a%is-ucv-k*1CGJL!ps3YCO)&-u zyo^r-1-_Vh%vNzx7Ck!YUVenbX5S#b6@jJpxbWYWn$wGEWjBCWlfJ1Q!*V(wVbi=J z4H8JXfX%=B#U_mL>I0RjZ2LmJ9Sbckx1csw?hYb$8=ySIBvPCe($Glw!uqN|%+R+Z z0P((5-09PWOlXcCtLUxO3v8^i7XT|n5mR7|h%2bH?plmxymq*AS#sz{ta=ynLC-SY zQe(N<4Nvg}2de1er;OB|Vo2c}a9_~C%ce7Elpmzmq?jw%-$7OI&wX-)G@1jHS^`_j zI#GOkuPE@sngI@DUoTQjr&Uxf?SOZRa3PAWEkVcCYKTe6p8ymy6k~x5`z(Z?^_Yj1TWq;DtBNi5=UYkj!_F^4rrq) zK2mp#DMqh-nKU?d5AUZ}NxB)^=&_(b+4e0VyQY}C<2{IjKK#%4nwv8aiP=w`0% zC9IYE#Bt#hJ}rg$>qGH)(dmxpLRuWNBFdZLlgzI+al$ea7_`2;)W4L9A|m;oA-0l1p$Z z54?LGAbz6v{ST5uuGc37id=NuQJp-g$X8uI?fG{Q;Iw2dF;J9Mac1x*Tz{TMnCF}4 z6mAYksQ<-H3qrc}ygGOtkHuuO(&8aztMED9wn>)r%>y$={H(P8&?nOXVAct7h;j{D z4M9YHJt2gP!b(ugfg{QQHISH!1`3JAtoh4^f7{IJjmr_qsNvUYsUtbWj(o*j7g-W!xqop5Q)YnGIHF<#w$aVuJdK3I@u1QYcjoPOG#)! zF4$4@8~2a&kkLyBRt|GgXHlC_KT!_WVB-?jMI5s!UNelOYc zUF^_8gwD0KeuJ>Jzh7wNsx4E(>L?V>5~AOH3zF8Zc~dFDD*QUH;ri1{V*`)K4p**M z!%g8oTCL~G&tCTPM!)H#$5(cE5EiIq8%E>Z!U#>}H6OumyltEhH2t<5fa35yPj=1D z#Mn@sqLe%r$NQuc;T>9(OIUO`>R|D))bMAwp6fnSiTglma&qF!543whQOVi%BisYY zGpa+M45cFpX|&uW;Ub@Lq$V2fb$u)}h}i)bkI*i@RB;Xy4E#N7tpJ&JF`0!ec%*q%rH;XtSIwq}$I z3Jyjj#e$mf^7$W5y5m=#MWoBFQ^eE;g{TM7eqxQiyV#|Q54R@1hUABIr-Vm(^ed9R z2^|^fX?fEK76{?{U!L ziGxNF{IH+ch|eJmi9b2ahF*4lVI_GsM)3e*kqRlAE)^q63|-O*tG|R5!xmcM?@YI> zEd)GxGO90VAF4wfD2Y+AbSJdII$&H&r|VkEiJO!TQN7vq{SSga@^$USz2XYRIz%3jlyf&%4z*k+z{8oG;Y}9{-CmU3wExEQd z4yk9n)6i^C$llw-ifvvDxQjA=F#pg%8sBRoG&Sdb+lg0dDPHP3A+?8oS6g$WDXrix zBm8GB7lrugbOECz!%)-V*x!)ARsRj7k|$(1m+|?wgik;54|VZpLGBWTFrvnL%9E9< zQG;g*K?5~U8%l3S$9sOq%iwoNTvC4t&BxkCSe0nE&+!T0=(dUG$|}C#&{aBVYPc4u zMByJNgQwq7)+nWeBG^9=)69?%KiVvo!U=@oJ3A;nxgV<<+9YiP!`2H$TZKBZ>d z3N+1fi{}9AtQbQjZ2b`-I4shK7^zl#qO5;LV7Q-7@iq+L&eZ+Xq=@?o_uF_pY7f7G z9+1MGVZ#n67+j2*qH`!&ws4L0Ll2_(Pf3xV^BGxPcMNerEv0L2P@Jg#f8_;Imagbf z&+rPs-AUZyR#2rDmWs0(0g6`bplCJyYfThX2gXcWeg z64w&U!1E}PMr+IBID$?1-B=;UkMzT&naTpEL0-VdO2VJ=yQxw~ptbF&{tu9y}T0~F#R4X%fd8i{!ZADMLtyRu3SI<<%!*F%U*xt-pyjB&4verulp zQPQ0CTSpkVSa@5>a6RaKAxWC5gP-O|rj#o-Ql=csa4L z>G%uq@Is@7pMF)Pd$l2^zZV8j^LDl@;8?jaJtJHShW-A_wP=)&^CH_rD-@Ok(Af<9 zv2rid_g7pOZH@pezmBhNb}UlL)CC|}?>~LBubZm@@6)T8B`~ji4I-@!AE$sqD*^%_qz%70#-O(pbZqD)et@Ya=Q;fgEOW#*guv^Ya1CrAjl#gA>4=8Qz2csi z7ny&!+V1!AMdynQ`z}OV0L+ho{WYcyBN>9nly9>CF4KaUC*1OFpGkvb+kJ7Bm9e_g=M;LYeC)AcaNy{ayEp~r( zc*(vKJLm?Ix@KVc`!X9Y9B~H}5(?Sz9;ku#sJv;9o+1pOJlRDG^Pq4D#op~Vl|0?^ zozdliSgPkGI<}3Hz*-3`!;Zj&914{MmIBd*UQLGEeO@G2$dgkxM_^Xc)}PhMb`LhnI0K?@{lZhZt6H;*t*OGpv?r)x;D zP!(g3@3aSdxx@dN4;E5UQCvm)(}K-HjqKhui>n*@D&Ea3xoHhw{DBm?H3Svz%hG0Q zl42cfVH$xc?(k1l%|!s%`cwmr zT#~?Ro0q$N(*DOgh1ins)U@LhEPJe4UfzL86mMUx?eYR!;{^32=_JO?tpdIcFR)8* z;xMcOU-ru>DS6ZCuS_Ch_kn#oKkcV>w0l8KYiGI+;+6&G@gj?{Fj)qs3@}SbYbL0 zc<2~1OAGlVl(mY{s?cu@^8R}_*WUDD=6j>nbm8s%r1vhzmV#fnNd_UOCAmwyeP_U- za+jfJdkj8Z1PMB#3?5U8Q!9%xb$t$_7`e5#W&eYc>9PKvl?ie^MGqTh>g%W&LNbLi zU<2Tz6^ajYs!4>(qmsl27=&Bh)VC+y=*z%cOwG+YW_Lzz36Vpwgn`f^DxX%0e4_{X z-sw4J-_GEkeV>FUfEdeZT-H#}tQloqBQ+Kz()9rRrhVBtU&uh1ECCPvE=o!)14CB8 zsH?0#-P#CE=_BMb6W7^ty~TDGOcQSDf(CC`$E|eIBQJ5LvORWEbJ@Ofebr(` zOw5=Vm^iw5`yyM@v~at?aS50Ng1ohQI*1jw2gma*;$Hah0J}XlHd-9dpPay@o^WiR zsh*a125R&+a!FFMUm5KY+l&FRuqu=7PA;O4;qvz6_j5#6{C;bG%V@w9U{85nFS`X! zT4nD0_+O3r_!nwTIVhLFCN=zmn4*523?wh^)q#gxJKvsd9}O{7I73-|y4Ue=l)$O> z`)dV*h-y#qs_by5ssGEyy{OF3o73JTVb7l*lj~h|+E$8*~qMo{T_w9UyB<9-|iY!Ze1^6xR-u9EG7R z4I|WkDz{H0X=0jZU>v6Fx*JH7xFjUNVyd7q!%N)bD6zzTWl@x8y$(*>ytz?u zeCCgoHBJ#APW&T)Dr#Cmjw_n#okyekV$XQC?|j|cLQzLk$~^ydx?-S1s1oCqV&v9} z*zQ8MH;NWKerHY(Cb2U0fLxwVE2v{IJL&feD*H+JljuN^o5iD@;wQlyyka zg}rx(3~lqbR%z~6rb2o1gy0>_BZLL`C!QMa5%U3*QT8kkT-*26)_cft1iSLsco06^ zR26jY4}3S`rZhAh4-PHkFL=+shshq1zda(w$r_!pWd zA$1;)8EPDk5^9$uY8Do}bL8kL%H_BknhXuRPwwk;D}u;*@p^Mcs7#W}ubTN{hs%uO z5`uFYtGdz|-j%4Al~Qw@h)@4EiSvRaG!LeF#b|wjijF#%0O-xeR=GmS%LM@N3Q$wc zpjh#vB;b&Br27`k08X=_0vPd)X;LQum|!ClRn12d0_$Wze&$C4(sCh2>jjinRtHe9 z+Qqa~4+<9F0G`)M+?)W4CjUQma$g_$kt9{X2G37o&{pj(dER4TG@+^2Z=|XO=kGvz zlmNd^S+m0dd%cxBb>>F`#b)tsq@$xORNZ#hS`O_BD@%glMS2eQMPGE0y(XOXtBEa( zc_s4;nCgPeR9vbW1uFfu%T#k*pJy)-qCd`#1hg_lyApnVF5NK(otGl$yzH+3=pzF2 zf&s3WobcafIbP@mE1_p|K{t#AfcbhpSqa_XHDCoU-qG`>^b}k?h6I?qu#ik>T_q~R z_Ll>@>kJuv$Cce^F3Bq=SxOMX; z+P7WT#l~u{<6%_Wt(w}S^xE{?g@6ACDIyInm(e{nmwmsLz1hEK>CH_} zdTxrzO-Dnqs|{?~rRNR@%XLXQEuQh1Y0+Vs_;3Yb9ROkPe^)EnIcopw3w9wnzD_0i z16tjO;x(u}J<-_aR_mu=Demv;7AYP4L&HlaZ(yHJuJG<-Jq5?&omP4c1 zVMt0y(r}&zj7^1FNm7Z{kHT~whg@ZIXRn1Ct8(BjI0_~6JyEd)pmcw^x!%$dhhEiQ z_~|AO>UaPy+hgicKoaf(%9~-X#_D}PdiUV{09AAY*uN&@4cOl$kmK%si_fM8n9af# zqzzaIU-g|QCCiPvLmXRem-()Hu$3DC%{}B&=Xc55P?vsx$RdE&);&JUs{Tc!^U{^Q=8eSURqGTwF1f8~nQMTXVVA;HQZrSdwNtMcIG zNk_W^Pia<=_**C;d=GfTCFtHVKv*8Ru6S6uEm#%Z-hNjtrYzh84xy!ziZ*%)MA+}T zPNQ7qo|k(^i5mJ);?osiG6&0mu()}E&X4uI4!LCAdT}%?XG?|Nd{gUHD_vV^KKEms z8k-@iZ>SZvaX{euRV71g>N+Ia+~BpUn~H5Jg`gnLz#f4cqX>bDdB+wf$uw9H8{qXn z0tCNHI=3Bem+0_!Fw?4U!Z6vz`CJcPE#Uw5I;>4D(XRdO1#C>j`N1MlmL8Bag0vN& z)@^x$4Jl~t1h+}ddh|x~cQch^Xj3&f`}I8^H@>6lEbG^nNc8IcG}6$pE|NR4tMJ_? zO>Lm3XHI7U3xbDpsf{rusmE4qIp9hqYia<78=|Kxq}Y02p)csxjmq5sRSAIqXw=B{ z3~>m^5|6`RKVbN-YzM$Q4C_BE#;-P4!A>IHe)xh6s5YSowmJF=Fq8uC+Nh^kdfOHq zI^FNI*|NQQLHBp{QfBp*Y8P^JrXj@5eyHHd)dWv&0=)n2`EU6vfI(?LPn=j~I*sve zAOud3b3eVpL`8Lq$LR;Y)iTJ}UawJ;!-d*+=ucdija7d>Wh;h5nY|;Bb|pC9T!Ni% z>pNqaI&nv4)GTe)$J`$se9+3bZ9NA08zXfK#_e-Y_2$iFhX6cwfHfV*?~oOOiKDyGqjaR3j4Da2kDLYHY}>@4g8zR z9*@iVmp~Mg$8^S$97fWF{0IB=BS7WZzwO$;s%r%}MCi@P4bTDC#p{@ZM@ng6PF zZQIRGr+~Q?D^I@b`6t|{==eM<%gLKxYDrY!hJ*w$^+^0Qz@}D6A%Ev%SrsRee>%Xa ze)kbYoMRY1HBoxishgD<-Lw?ya~a@;1_axI(oSeVKnD@TeL%ATgv>2s5E*&7O=k^3 zsjyHGP6SLDmq0XeL<5B~h}f+wL8%_VurQIb<3cxR^M;DN{2J^xknYr4^#U4GL@6+K z7%6J(4Mi!8Ge=*+J&Z;Vy25`BMDQ!hM2;JDr4N;~vTTHjt7WUlT&s`iP3>u1-v3pG zfbeKzdGNAI{P<|T!z_-`xSrDC)nOh8hhDnogr{&7(d{?uChxrAfq;8>lk!rsgR>?# zMKcUK=vUA|^V!dS1cQF{84OxQfe}hKIlcsgCMMyrt^=h&4M^E5T3o0e%nJ&Yv971U zz`$)m{}zCD6j}xsbZ_=&V3JaQiH!_(AQ4M;&~f@qzmdK-8ihI};3UZh^l$?4o_`K? zftEdkfo%Xgz0Y!lXP-kmwg+>H^zfqchzRaB2uw=qZK|@kwGSKo8JRz;1>)D>XXj)u z_P;_0j14zrq(Z1I|p2S{%1}c;~$d#l$DxLg3FW&PLzESJhQoJ-?Y>0 z9I;CLRbC%Dboc6#wLSR{__8&X?9pRyr1cFELIHP-+Zo!hIRU$~T z&oz`NW5c}P*e?A6iK^iOVNME^%4?*o{QGo|OlC!OLCAg&_ChWJl|@qgy<%Axcr>Zn zAFt9kpB2Z(cR-I|4 zK&J&AZV2=A19~6AI9ID9;#|-9WTpFDn#S}8{iwg_m@>|>L}_Ud=-)7rl~j@_7c&g_ EKOOL;NB{r; literal 0 HcmV?d00001 diff --git a/book/preliminary/git.md b/book/preliminary/git.md index b3b7764..e25d20e 100644 --- a/book/preliminary/git.md +++ b/book/preliminary/git.md @@ -1,4 +1,4 @@ -# Setting up `git` +# Setting up Git ## What is Git? @@ -12,41 +12,40 @@ You are not required to know Git in advance of this event, but this is a great o ## Setting up on JupyterHub -Below are instructions to get you setup with `git` on the {{hackweek}} -JupyterHub. These are only basic instructions to get started. See the +Below are instructions to get you setup with Git on the {{ hackweek }} container image +running on CryoCloud. These are only basic instructions to get started. See the [Software Carpentry Git](https://swcarpentry.github.io/git-novice/index.html) instructions for a thorough explanation and background information. ### 1. Login to JupyterHub -Go to {{ jupyterhub_url }}. See also our JupyterHub documentation: {ref}`accessing-jupyterhub` +Go to {{ jupyterhub_url }}. ### 2. Open a Terminal -Choose the "Terminal" app from the "Other" options in the Launcher. +Choose the "**Terminal**" app from the "Other" options in the Launcher. ![jupyterlab](../img/jupyter-terminal.png) -### 3. Configure Basic `git` Information +### 3. Configure Basic Information Set your name and email address. The `user.name` is your full name, not your "username" on GitHub or anywhere else. The email address should be one registered on your GitHub account. ```{attention} Use your own name instead of the placeholder `Attendee Name` -in the below commands. For the email, it should be the address you used to create -your GitHub account instead of `attendee@hackweek.com`. Both values need to be +in the below commands. For the email, it should be an address you use with +your GitHub account instead of `attendee@example.com`. Both values need to be surrounded by quotes `"`. ``` ```shell $ git config --global user.name "Attendee Name" -$ git config --global user.email "attendee@hackweek.com" +$ git config --global user.email "attendee@example.com" $ git config --global pull.rebase false ``` -The third line is a configuration you must set before pulling with git. It specifies -the strategy on how git will apply changes you pull from a remote git repository. +The third line configures the strategy git will apply to changes you pull from a remote git repository. More on strategies is [described here.](http://git-scm.com/book/en/v2/Git-Branching-Rebasing) To verify that you successfully executed the above commands, use the `git config --list` command @@ -54,19 +53,46 @@ in the Terminal. The output should look similar to this: ```shell $ git config --list user.name=Attendee Name -user.email=attendee@hackweek.com +user.email=attendee@example.com pull.rebase=false ``` ### 4. Authenticating with GitHub -In order to interact with GitHub via the `git` command inside the JupyterHub environment, -you need to set up authentication. The two methods below both rely on secure -Personal Access Tokens, which you can learn more about on [GitHub docs][gh-docs]. +In order to interact with GitHub via the `git` command in the Terminal or the Git panel in JupyterLab, +you need to set up authentication. We describe three methods below. The first two rely on +Personal Access Tokens (PATs), which you can learn about in the [GitHub PAT docs][gh-pat]. +The difference between these first two is whether you create your own PAT or use a GitHub App to manage PATs. +The third method uses SSH key pairs, which you can learn a lot about in the [GitHub SSH docs][gh-ssh]. -[gh-docs]:https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens +[gh-ssh]: https://docs.github.com/en/authentication/connecting-to-github-with-ssh +[gh-pat]: https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens -#### Option 1: CryoCloud GitHub Access +#### Option 1: Manual PAT Configuration + +Open up the instructions on the +[GitHub personal access tokens](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-personal-access-token-classic) +page. +When you've gotten through it all, GitHub will have created a token, but you have to save it before navigating away. Treat it like you would any password, and know that the token won't be visible again! + +For this hackweek, check the full repo scope as shown in this screenshot: + +![github-token](../img/github-token.png) + +To use the PAT, you need Git to do something that requires authentication, such as pushing to a repository or cloning a private repository. +These actions will prompt for credentials. +**Use the PAT instead of your GitHub password**. + +If you use the Git panel in JupyterLab, be sure to check "**Save my login temporarily**"! + +![git gui credentials](../img/git-gui-credentials.png) + +```{attention} +The Terminal prompt for the `Password:` will not show any characters that are entered +and stay blank. Make sure to only paste in your token once and then hit the enter key. +``` + +#### Option 2: GitHub Scoped Credentials We recommend this method if you have permission to configure a GitHub App on the user or organization where you need to authenticate. For instance, if you want to push to `https://github.com/example/repo.git`, then you need to have @@ -97,28 +123,36 @@ showing the Terminal way just described. ![gh-scoped-creds](https://miro.medium.com/v2/resize:fit:720/format:webp/1*B3qjACXLBG9pBOlzY8WNxA.gif) -#### Option 2: Manual Configuration +#### Option 3: SSH Key Pair -Work through the instructions on the -[GitHub personal access tokens](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-personal-access-token-classic) -page. The maximum permissions you likely need is the **repo** scope. +This method generates a private and public SSH key in your personal `~/.ssh` folder. +Note that your secrets may not be as secure with your personal folder residing in the commercial cloud, so we recommend using a passphrase with your SSH key pair. -![github-token](../img/github-token.png) +To generate the pair, run the following Terminal command, press enter to accept the default location, and then create a passphrase when prompted. +You will need to use that passphrase, so treat it like any other password. + +```shell +ssh-keygen -t ed25519 -C "jovyan@cryocloud" +``` -Once you have created your token, be sure to save it or use it before navigating away. It won't be -visible again. To have it saved on CryoCloud the first time you use it, configure the `git` credential helper. +Everytime you restart your JupyterLab server, you need to unlock your private key before using `git` commands or the Git panel in JupyterLab. ```shell -git config --global credential.helper store +ssh-add ~/.ssh/id_ed25519 ``` -To use the Personal Access Token, you need to use `git` to do something that requires authentication, such as -pushing to a repository or cloning a private repository. These actions will prompt -for input of your credentials. When prompted for a password, use the Personal Access Token rather than your -GitHub password. +Next, copy the string printed by the Terminal command `cat ~/.ssh/id_ed25519.pub`. +That is the public key you can share with GitHub. -```{attention} -The prompt for the `Password:` will not show any characters that are entered -and stay blank. Make sure to only copy and paste your token once and then -hit the enter key. +1. Go to "Settings" > "SSH and GPG keys" in your GitHub [profile](https://github.com/settings/keys). +1. Click the "**New SSH key**" button. +1. Ignore the "**Title**" field. +1. Paste the entire `~/.ssh/id_ed25519.pub` contents in the "**Key**" field and click "**Add SSH key**". + +Now verify that your key is unlocked and copied to GitHub by trying the following back in your Terminal. + +```shell +ssh -T git@github.com ``` + +The command should succeed without prompting for your passphrase. \ No newline at end of file From 4d8eb580734469fdaca3a0a48955308281b89dfe Mon Sep 17 00:00:00 2001 From: Ian Carroll Date: Thu, 31 Jul 2025 19:24:51 +0000 Subject: [PATCH 2/3] unused --- .github/workflows/qaqc.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/qaqc.yaml b/.github/workflows/qaqc.yaml index 87d0160..59c92e1 100644 --- a/.github/workflows/qaqc.yaml +++ b/.github/workflows/qaqc.yaml @@ -21,9 +21,9 @@ jobs: run: | pip install nb-clean==2.0.2 - - name: Ensure clean notebooks - run: | - python .github/workflows/ensure_clean_notebooks.py + # - name: Ensure clean notebooks + # run: | + # python .github/workflows/ensure_clean_notebooks.py # NOTE: this isn't a comprehensive spellcheck, just common typos - name: Spellcheck From d0a4026f045e3cf02f421fe584cb71a88fab6c98 Mon Sep 17 00:00:00 2001 From: Ian Carroll Date: Thu, 31 Jul 2025 19:27:29 +0000 Subject: [PATCH 3/3] git will ask --- book/preliminary/git.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/preliminary/git.md b/book/preliminary/git.md index e25d20e..c7f0364 100644 --- a/book/preliminary/git.md +++ b/book/preliminary/git.md @@ -135,7 +135,7 @@ You will need to use that passphrase, so treat it like any other password. ssh-keygen -t ed25519 -C "jovyan@cryocloud" ``` -Everytime you restart your JupyterLab server, you need to unlock your private key before using `git` commands or the Git panel in JupyterLab. +Everytime you restart your JupyterLab server, you need to unlock your private key before using the Git panel in JupyterLab. ```shell ssh-add ~/.ssh/id_ed25519