-
Notifications
You must be signed in to change notification settings - Fork 1
/
basics_git.html
1136 lines (1041 loc) · 76.4 KB
/
basics_git.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta http-equiv="X-UA-Compatible" content="IE=EDGE" />
<meta name="author" content="Gabriel Nakamura" />
<meta name="date" content="2024-07-16" />
<title>Controle de versão</title>
<script src="site_libs/header-attrs-2.26/header-attrs.js"></script>
<script src="site_libs/jquery-3.6.0/jquery-3.6.0.min.js"></script>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link href="site_libs/bootstrap-3.3.5/css/flatly.min.css" rel="stylesheet" />
<script src="site_libs/bootstrap-3.3.5/js/bootstrap.min.js"></script>
<script src="site_libs/bootstrap-3.3.5/shim/html5shiv.min.js"></script>
<script src="site_libs/bootstrap-3.3.5/shim/respond.min.js"></script>
<style>h1 {font-size: 34px;}
h1.title {font-size: 38px;}
h2 {font-size: 30px;}
h3 {font-size: 24px;}
h4 {font-size: 18px;}
h5 {font-size: 16px;}
h6 {font-size: 12px;}
code {color: inherit; background-color: rgba(0, 0, 0, 0.04);}
pre:not([class]) { background-color: white }</style>
<script src="site_libs/jqueryui-1.13.2/jquery-ui.min.js"></script>
<link href="site_libs/tocify-1.9.1/jquery.tocify.css" rel="stylesheet" />
<script src="site_libs/tocify-1.9.1/jquery.tocify.js"></script>
<script src="site_libs/navigation-1.1/tabsets.js"></script>
<script src="site_libs/navigation-1.1/codefolding.js"></script>
<script src="site_libs/navigation-1.1/sourceembed.js"></script>
<script src="site_libs/clipboard-1.7.1/clipboard.min.js"></script>
<link href="site_libs/primer-tooltips-1.4.0/build.css" rel="stylesheet" />
<link href="site_libs/klippy-0.0.0.9500/css/klippy.min.css" rel="stylesheet" />
<script src="site_libs/klippy-0.0.0.9500/js/klippy.min.js"></script>
<link href="site_libs/vembedr-0.1.5/css/vembedr.css" rel="stylesheet" />
<style type="text/css">
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
span.underline{text-decoration: underline;}
div.column{display: inline-block; vertical-align: top; width: 50%;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;}
</style>
<style type="text/css">
code {
white-space: pre;
}
.sourceCode {
overflow: visible;
}
</style>
<style type="text/css" data-origin="pandoc">
pre > code.sourceCode { white-space: pre; position: relative; }
pre > code.sourceCode > span { line-height: 1.25; }
pre > code.sourceCode > span:empty { height: 1.2em; }
.sourceCode { overflow: visible; }
code.sourceCode > span { color: inherit; text-decoration: inherit; }
div.sourceCode { margin: 1em 0; }
pre.sourceCode { margin: 0; }
@media screen {
div.sourceCode { overflow: auto; }
}
@media print {
pre > code.sourceCode { white-space: pre-wrap; }
pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
}
pre.numberSource code
{ counter-reset: source-line 0; }
pre.numberSource code > span
{ position: relative; left: -4em; counter-increment: source-line; }
pre.numberSource code > span > a:first-child::before
{ content: counter(source-line);
position: relative; left: -1em; text-align: right; vertical-align: baseline;
border: none; display: inline-block;
-webkit-touch-callout: none; -webkit-user-select: none;
-khtml-user-select: none; -moz-user-select: none;
-ms-user-select: none; user-select: none;
padding: 0 4px; width: 4em;
color: #aaaaaa;
}
pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa; padding-left: 4px; }
div.sourceCode
{ background-color: #f8f8f8; }
@media screen {
pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
}
code span.al { color: #ef2929; } /* Alert */
code span.an { color: #8f5902; font-weight: bold; font-style: italic; } /* Annotation */
code span.at { color: #204a87; } /* Attribute */
code span.bn { color: #0000cf; } /* BaseN */
code span.cf { color: #204a87; font-weight: bold; } /* ControlFlow */
code span.ch { color: #4e9a06; } /* Char */
code span.cn { color: #8f5902; } /* Constant */
code span.co { color: #8f5902; font-style: italic; } /* Comment */
code span.cv { color: #8f5902; font-weight: bold; font-style: italic; } /* CommentVar */
code span.do { color: #8f5902; font-weight: bold; font-style: italic; } /* Documentation */
code span.dt { color: #204a87; } /* DataType */
code span.dv { color: #0000cf; } /* DecVal */
code span.er { color: #a40000; font-weight: bold; } /* Error */
code span.ex { } /* Extension */
code span.fl { color: #0000cf; } /* Float */
code span.fu { color: #204a87; font-weight: bold; } /* Function */
code span.im { } /* Import */
code span.in { color: #8f5902; font-weight: bold; font-style: italic; } /* Information */
code span.kw { color: #204a87; font-weight: bold; } /* Keyword */
code span.op { color: #ce5c00; font-weight: bold; } /* Operator */
code span.ot { color: #8f5902; } /* Other */
code span.pp { color: #8f5902; font-style: italic; } /* Preprocessor */
code span.sc { color: #ce5c00; font-weight: bold; } /* SpecialChar */
code span.ss { color: #4e9a06; } /* SpecialString */
code span.st { color: #4e9a06; } /* String */
code span.va { color: #000000; } /* Variable */
code span.vs { color: #4e9a06; } /* VerbatimString */
code span.wa { color: #8f5902; font-weight: bold; font-style: italic; } /* Warning */
</style>
<script>
// apply pandoc div.sourceCode style to pre.sourceCode instead
(function() {
var sheets = document.styleSheets;
for (var i = 0; i < sheets.length; i++) {
if (sheets[i].ownerNode.dataset["origin"] !== "pandoc") continue;
try { var rules = sheets[i].cssRules; } catch (e) { continue; }
var j = 0;
while (j < rules.length) {
var rule = rules[j];
// check if there is a div.sourceCode rule
if (rule.type !== rule.STYLE_RULE || rule.selectorText !== "div.sourceCode") {
j++;
continue;
}
var style = rule.style.cssText;
// check if color or background-color is set
if (rule.style.color === '' && rule.style.backgroundColor === '') {
j++;
continue;
}
// replace div.sourceCode by a pre.sourceCode rule
sheets[i].deleteRule(j);
sheets[i].insertRule('pre.sourceCode{' + style + '}', j);
}
}
})();
</script>
<style type="text/css">
#rmd-source-code {
display: none;
}
</style>
<style type = "text/css">
.main-container {
max-width: 940px;
margin-left: auto;
margin-right: auto;
}
img {
max-width:100%;
}
.tabbed-pane {
padding-top: 12px;
}
.html-widget {
margin-bottom: 20px;
}
button.code-folding-btn:focus {
outline: none;
}
summary {
display: list-item;
}
details > summary > p:only-child {
display: inline;
}
pre code {
padding: 0;
}
</style>
<style type="text/css">
.dropdown-submenu {
position: relative;
}
.dropdown-submenu>.dropdown-menu {
top: 0;
left: 100%;
margin-top: -6px;
margin-left: -1px;
border-radius: 0 6px 6px 6px;
}
.dropdown-submenu:hover>.dropdown-menu {
display: block;
}
.dropdown-submenu>a:after {
display: block;
content: " ";
float: right;
width: 0;
height: 0;
border-color: transparent;
border-style: solid;
border-width: 5px 0 5px 5px;
border-left-color: #cccccc;
margin-top: 5px;
margin-right: -10px;
}
.dropdown-submenu:hover>a:after {
border-left-color: #adb5bd;
}
.dropdown-submenu.pull-left {
float: none;
}
.dropdown-submenu.pull-left>.dropdown-menu {
left: -100%;
margin-left: 10px;
border-radius: 6px 0 6px 6px;
}
</style>
<script type="text/javascript">
// manage active state of menu based on current page
$(document).ready(function () {
// active menu anchor
href = window.location.pathname
href = href.substr(href.lastIndexOf('/') + 1)
if (href === "")
href = "index.html";
var menuAnchor = $('a[href="' + href + '"]');
// mark the anchor link active (and if it's in a dropdown, also mark that active)
var dropdown = menuAnchor.closest('li.dropdown');
if (window.bootstrap) { // Bootstrap 4+
menuAnchor.addClass('active');
dropdown.find('> .dropdown-toggle').addClass('active');
} else { // Bootstrap 3
menuAnchor.parent().addClass('active');
dropdown.addClass('active');
}
// Navbar adjustments
var navHeight = $(".navbar").first().height() + 15;
var style = document.createElement('style');
var pt = "padding-top: " + navHeight + "px; ";
var mt = "margin-top: -" + navHeight + "px; ";
var css = "";
// offset scroll position for anchor links (for fixed navbar)
for (var i = 1; i <= 6; i++) {
css += ".section h" + i + "{ " + pt + mt + "}\n";
}
style.innerHTML = "body {" + pt + "padding-bottom: 40px; }\n" + css;
document.head.appendChild(style);
});
</script>
<!-- tabsets -->
<style type="text/css">
.tabset-dropdown > .nav-tabs {
display: inline-table;
max-height: 500px;
min-height: 44px;
overflow-y: auto;
border: 1px solid #ddd;
border-radius: 4px;
}
.tabset-dropdown > .nav-tabs > li.active:before, .tabset-dropdown > .nav-tabs.nav-tabs-open:before {
content: "\e259";
font-family: 'Glyphicons Halflings';
display: inline-block;
padding: 10px;
border-right: 1px solid #ddd;
}
.tabset-dropdown > .nav-tabs.nav-tabs-open > li.active:before {
content: "\e258";
font-family: 'Glyphicons Halflings';
border: none;
}
.tabset-dropdown > .nav-tabs > li.active {
display: block;
}
.tabset-dropdown > .nav-tabs > li > a,
.tabset-dropdown > .nav-tabs > li > a:focus,
.tabset-dropdown > .nav-tabs > li > a:hover {
border: none;
display: inline-block;
border-radius: 4px;
background-color: transparent;
}
.tabset-dropdown > .nav-tabs.nav-tabs-open > li {
display: block;
float: none;
}
.tabset-dropdown > .nav-tabs > li {
display: none;
}
</style>
<!-- code folding -->
<style type="text/css">
.code-folding-btn { margin-bottom: 4px; }
</style>
<style type="text/css">
#TOC {
margin: 25px 0px 20px 0px;
}
@media (max-width: 768px) {
#TOC {
position: relative;
width: 100%;
}
}
@media print {
.toc-content {
/* see https://github.com/w3c/csswg-drafts/issues/4434 */
float: right;
}
}
.toc-content {
padding-left: 30px;
padding-right: 40px;
}
div.main-container {
max-width: 1200px;
}
div.tocify {
width: 20%;
max-width: 260px;
max-height: 85%;
}
@media (min-width: 768px) and (max-width: 991px) {
div.tocify {
width: 25%;
}
}
@media (max-width: 767px) {
div.tocify {
width: 100%;
max-width: none;
}
}
.tocify ul, .tocify li {
line-height: 20px;
}
.tocify-subheader .tocify-item {
font-size: 0.90em;
}
.tocify .list-group-item {
border-radius: 0px;
}
</style>
</head>
<body>
<div class="container-fluid main-container">
<!-- setup 3col/9col grid for toc_float and main content -->
<div class="row">
<div class="col-xs-12 col-sm-4 col-md-3">
<div id="TOC" class="tocify">
</div>
</div>
<div class="toc-content col-xs-12 col-sm-8 col-md-9">
<div class="navbar navbar-default navbar-fixed-top" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-bs-toggle="collapse" data-target="#navbar" data-bs-target="#navbar">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="index.html">Boas Práticas e Ferramentas da Ciência Aberta na Ecologia - BIE5798</a>
</div>
<div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li>
<a href="index.html">Início</a>
</li>
<li>
<a href="intro_ciencia_aberta.html">O que é ciência aberta?</a>
</li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
Dados abertos
<span class="caret"></span>
</a>
<ul class="dropdown-menu" role="menu">
<li>
<a href="dados_abertos.html">O que são dados abertos?</a>
</li>
<li>
<a href="metadata_EML.html">Metadados</a>
</li>
</ul>
</li>
<li>
<a href="Organizacao_dir_local.html">Organização local</a>
</li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
Versionamento
<span class="caret"></span>
</a>
<ul class="dropdown-menu" role="menu">
<li>
<a href="basics_git.html">ABC do versionamento</a>
</li>
<li>
<a href="commits-travel.html">Viajando no tempo</a>
</li>
<li>
<a href="gitgnore.html">Ignorando arquivos</a>
</li>
<li>
<a href="colabs_github.html">Trabalho colaborativo</a>
</li>
<li>
<a href="conflitos.html">Resolvendo conflitos</a>
</li>
<li>
<a href="releasing.html">Release</a>
</li>
</ul>
</li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
Programação letrada
<span class="caret"></span>
</a>
<ul class="dropdown-menu" role="menu">
<li>
<a href="rmarkdown-basics.html">Rmarkdown</a>
</li>
<li>
<a href="sites-basics.html">Sites</a>
</li>
</ul>
</li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
Avançado
<span class="caret"></span>
</a>
<ul class="dropdown-menu" role="menu">
<li>
<a href="renv-basics.html">Manejo de versões de pacotes</a>
</li>
<li>
<a href="rocker-basics.html">Containers</a>
</li>
<li>
<a href="targets_basics.html">Fluxo de trabalho</a>
</li>
<li>
<a href="metadata_EML_pratice.html">Metadados com EML</a>
</li>
<li>
<a href="git_large_files.html">Manejo de arquivos grandes</a>
</li>
</ul>
</li>
<li>
<a href="publicacoes.html">Acesso aberto</a>
</li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
Outras tendências
<span class="caret"></span>
</a>
<ul class="dropdown-menu" role="menu">
<li>
<a href="pre-registro.html">Pré-registro</a>
</li>
<li>
<a href="revisao-codigo.html">Revisão de código</a>
</li>
</ul>
</li>
</ul>
<ul class="nav navbar-nav navbar-right">
</ul>
</div><!--/.nav-collapse -->
</div><!--/.container -->
</div><!--/.navbar -->
<div id="header">
<div class="btn-group pull-right float-right">
<button type="button" class="btn btn-default btn-xs btn-secondary btn-sm dropdown-toggle" data-toggle="dropdown" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span>Code</span> <span class="caret"></span></button>
<ul class="dropdown-menu dropdown-menu-right" style="min-width: 50px;">
<li><a id="rmd-download-source" href="#">Download Rmd</a></li>
</ul>
</div>
<h1 class="title toc-ignore">Controle de versão</h1>
<h4 class="author">Gabriel Nakamura</h4>
<h4 class="date">2024-07-16</h4>
</div>
<script>
addClassKlippyTo("pre.r, pre.markdown");
addKlippy('left', 'top', 'auto', '1', 'Copy code', 'Copied!');
</script>
<div id="apresentação" class="section level1">
<h1>Apresentação</h1>
<p>Nesta primeira seção irei apresentar as principais ferramentas que
utilizaremos para nos ajudar na organização computacional de dados,
scripts, análises e projetos científicos em geral. Estas ferramentas
irão auxiliar desde a organização local de seus dados até a
disponibilização destes dados em plataformas de acesso aberto. Várias
delas já devem ser velhas conhecidas por vocês, por exemplo, o RStudio,
então dispensam maiores apresentações. Por isso, grande parte deste
documento vai tratar de uma ferramenta até bem conhecida pelo nome, mas
que pra muita gente pode parecer coisa de outro mundo: o
<strong>Git</strong>. Vocês verão que conhecem mais dele do que
imaginam, e que muitas das funções que ele possibilita realizar nós já
fazemos em nosso dia-a-dia através de outros aplicativos, porém, com
mais eficiência e controle das ações.</p>
<div id="pacotes-necessários" class="section level2">
<h2>Pacotes necessários</h2>
<p>Para executar os códigos desta parte é importante ter os seguintes
pacotes instalados: <code>usethis</code>, <code>devtools</code> e
<code>gitcreds</code></p>
<p>Você pode realizar a instalação utilizando a seguinte linha de
código:</p>
<div class="sourceCode" id="cb1"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb1-1"><a href="#cb1-1" tabindex="-1"></a>libs <span class="ot"><-</span> <span class="fu">c</span>(<span class="st">"usethis"</span>, <span class="st">"devtoos"</span>, <span class="st">"gitcreds"</span>)</span>
<span id="cb1-2"><a href="#cb1-2" tabindex="-1"></a><span class="cf">if</span> (<span class="sc">!</span><span class="fu">requireNamespace</span>(libs, <span class="at">quietly =</span> <span class="cn">TRUE</span>)){</span>
<span id="cb1-3"><a href="#cb1-3" tabindex="-1"></a> <span class="fu">install.packages</span>(libs)</span>
<span id="cb1-4"><a href="#cb1-4" tabindex="-1"></a> }</span></code></pre></div>
<p>Caso você não tenha os pacotes acima citados a instalação será
realizada. Caso já tenha em seu computador, nada irá acontecer.</p>
</div>
</div>
<div
id="hello-git---introdução-ao-uso-de-sistema-de-controle-de-versões"
class="section level1">
<h1>Hello Git - Introdução ao uso de sistema de controle de versões</h1>
<p>O Git trata-se de um sistema de controle de versões, mas afinal, o
que é um sistema de controle de versões? Estamos mais acostumados do que
imaginamos quando o assunto é controle de versões, apesar de parecer
algo de outro mundo. Um exemplo que todos nós estamos acostumados é
oferecido pelo editor de texto Word, quando ligamos a opção “Track
changes”. Ao fazermos isso estamos controlando todas as modificações que
fazemos em um documento. O Git faz a mesma coisa, porém para uma pasta
inteira (ou <em>diretório</em>, na linguagem do controle de
versões).</p>
<p>Portanto, o Git nada mais é que um sistema criado para realizar o
rastreio de toda e qualquer modificação de arquivos dentro de uma pasta,
utilizando a terminologia do versionamento, tudo o que é feito em um
diretório associado ao Git é <em>observado</em> (<em>watch</em> na
linguagem do versionamento).</p>
<div id="git-e-github" class="section level2">
<h2>Git e GitHub</h2>
<p>Ter a possibilidade de controlar as versões dos documentos já é bom,
imagine, além disso, ter um local remoto onde tudo isso fica guardado.
Ou seja, se seu computador quebrar, for roubado, pifar, ou se você
troca-lo, tudo estará seguro em um lugar chamado GitHub.</p>
<p>Portanto, Git e <a href="https://github.com/">GitHub</a> são coisas
distintas. O GitHub é o GoogleDrive (ou o OneDrive) dos códigos. Ele tem
como função armazenar remotamente todos os trabalhos que são feitos
localmente e que estão sendo monitorados pelo Git, mas com muito mais
potencialidades e controle de armazenamento que as ferramentas do Bill
Gates. Por exemplo, imagine guardar um site inteiro no Google Drive, ou
um pacote estatístico que você escreveu, e ainda disponibilizar essas
coisas para outras pessoas… parece complicado se usarmos as ferramentas
comerciais mais comuns, mas com o GitHub tudo isso se torna possível ser
realizado com facilidade</p>
</div>
<div id="git-e-git-client" class="section level2">
<h2>Git e Git client</h2>
<p>Temos uma ferramenta que possibilita o versionamento (o Git), outra
que possibilita o armazenamento, colaboração, compartilhamento (GitHub),
mas como controlamos essas ferramentas? É aí que entra o que chamamos de
<strong>Git client</strong></p>
<p>Uma simples analogia para entender a diferença entre um Git client e
o Git é a diferença entre R e RStudio. O R é a ferramenta onde os
processos são realizados, o RStudio é uma interface específica e
amigável para o uso do R. Da mesma forma o Git é a ferramenta que
realiza o controle de versão, já o Git client é a interface específica
para que o usuário possa interagir de maneira mais amigável com o Git e
GitHub. Existem vários Git clients que podemos utilizar para realizar
essa interação, por exemplo, o <a
href="https://www.gitkraken.com/">GitKraken</a> e <a
href="https://about.gitlab.com/">GitLab</a>. Cada um tem suas vantagens
e desvantagens.</p>
<p>Neste curso usaremos um Git client que é um velho conhecido nosso, o
<strong>RStudio</strong>. Faremos isso pois o RStudio (agora chamado
Posit, mas vamos manter o velho nome) é a interface mais comum utilizada
nos estudos de ecologia e evolução, além de apresentar uma grande
quantidade de materiais disponíveis na internet e também por ser aquela
que o instrutor que vos fala tem mais familiaridade.</p>
</div>
<div id="integrando-git-github-e-rstudio" class="section level2">
<h2>Integrando Git, GitHub e RStudio</h2>
<p>Agora que conhecemos as ferramentas, imagine se conseguíssemos
colocar elas em um só lugar. Imagine um sistema que integra o seu
programa favorito de análises estatísticas, o seu programa favorito de
controle de versões e também o seu repositório remoto favorito. Pois é
disso que se trata a integração do Git com o GitHub e RStudio. Tudo
(quase tudo) pode ser feito no Git através do RStudio. Portanto, nas
próximas seções irei apresentar como podemos integrar o controle de
versão (Git) com o repositório remoto (GitHub) e o RStudio.</p>
</div>
</div>
<div id="mãos-no-teclado---instalando-e-configurando-o-git"
class="section level1">
<h1>Mãos no teclado - Instalando e configurando o Git</h1>
<p>O primeiro passo antes de instalar o Git é saber se você já tem ele
instalado em seu computador. Para tanto você deve acessar a linha de
comando de seu sistema operacional (bash, prompt, isso vai variar
dependendo do tipo de sistema que usa) e digitar o comando:</p>
<div class="sourceCode" id="cb2"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb2-1"><a href="#cb2-1" tabindex="-1"></a>git</span></code></pre></div>
<p>Caso retorne uma mensagem indicando o local do git no seu computador,
ótimo, uma tarefa a menos, caso contrário você terá que instalar o git
de acordo com as especificidades do seu sistema operacional que serão
apresentadas a seguir.</p>
<div id="instalação-do-git-no-windows" class="section level2">
<h2>Instalação do Git no Windows</h2>
<p>Instale o Git acessando <a href="https://gitforwindows.org/">aqui</a>
e siga as informações do auxiliar de instalação que foi baixado.</p>
</div>
<div id="instação-do-git-no-mac-os" class="section level2">
<h2>Instação do Git no Mac OS</h2>
<p>Instale o Git no seu Mac baixando o Xcode command line tools caso
você ainda não o tenha. Esta aplicação já vem com o git. Aceite as
configurações e clique em instalar</p>
<p>Em seguida configure o git usando a linha de comando seguinte no seu
terminal:</p>
<div class="sourceCode" id="cb3"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb3-1"><a href="#cb3-1" tabindex="-1"></a>git <span class="sc">--</span>version</span>
<span id="cb3-2"><a href="#cb3-2" tabindex="-1"></a>git config <span class="sc">--</span>global user.name <span class="st">"Your name here"</span></span>
<span id="cb3-3"><a href="#cb3-3" tabindex="-1"></a>git config <span class="sc">--</span>global user.email <span class="st">"[email protected]"</span></span></code></pre></div>
</div>
<div id="instalação-do-git-no-linux" class="section level2">
<h2>Instalação do Git no Linux</h2>
<p>Digite a seguinte linha de comando caso você tenha Ubuntu ou Debian
Linux</p>
<div class="sourceCode" id="cb4"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb4-1"><a href="#cb4-1" tabindex="-1"></a>sudo apt<span class="sc">-</span>get install git</span></code></pre></div>
<p>Se tem Fedora ou HatLinux use:</p>
<div class="sourceCode" id="cb5"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb5-1"><a href="#cb5-1" tabindex="-1"></a>sudo yum install git</span></code></pre></div>
<p><strong>Algumas coisas podem ser diferentes dependendo do seu sistema
operacional e versão do Linux</strong>, caso se depare com algum
problema tente abrir um <strong>Issue</strong> no repositório desta
apostila no GitHub e tentaremos resolver :)</p>
</div>
</div>
<div id="configuração-do-git-e-integração-com-rstudio"
class="section level1">
<h1>Configuração do Git e integração com RStudio</h1>
<div id="utilizando-o-pacote-usethis" class="section level2">
<h2>Utilizando o pacote <code>usethis</code></h2>
<p>Após a instalação do Git devemos configur o GitHub no nosso
computador. Para configurar o GitHub, ou seja, para que o Git e GitHub
saiba quem está usando, vamos utilizar a configuração com auxílio do
ótimo pacote <code>usethis</code>. Portanto, abra o RStudio e
digite:</p>
<div class="sourceCode" id="cb6"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb6-1"><a href="#cb6-1" tabindex="-1"></a><span class="fu">library</span>(usethis)</span>
<span id="cb6-2"><a href="#cb6-2" tabindex="-1"></a><span class="fu">use_git_config</span>(<span class="at">user.name =</span> <span class="st">"SeuNomeDeUsuario"</span>, <span class="at">user.email =</span> <span class="st">"[email protected]"</span>)</span></code></pre></div>
<p>Lembre de substituir os campos que aparecerão no console do seu R com
suas informações. “SeuNomeDeUsuario” é o nome que você cadastrou no
GitHub</p>
<div class="figure" style="text-align: center">
<img src="figs/NomeUsuario.png" alt="Nome do usuário destacado em vermelho" width="1262" />
<p class="caption">
Nome do usuário destacado em vermelho
</p>
</div>
</div>
<div id="utilizando-o-pacote-gitcreds---mais-recomendada"
class="section level2">
<h2>Utilizando o pacote <code>gitcreds</code> - <strong>Mais
recomendada</strong></h2>
<p>Apesar de estarmos falando de ciência aberta, o seu perfil no GitHub
é pessoal, portanto é importante que haja uma forma de autenticação onde
o GitHub saiba que você é o dono do perfil. Isso geralmente é feito
através do uso de senhas, porém senhas nem sempre são seguras (ok,
provavelmente ninguém vai querer invadir nosso GitHub para tomar
informações sobre uma função que calcula a dimensionalidade da
biodiversidade, mas outras coisas são desenvolvidas e hospedadas no
GitHub), e por isso a forma padrão de autenticação utilizada pelo GitHub
é o chamado PAT (Personal Access Token). Segundo o próprio GitHub um PAT
é:</p>
<blockquote>
<p>“Personal access tokens are an alternative to using passwords for
authentication to GitHub when using the GitHub API or the command
line.”</p>
</blockquote>
<p>O PAT nada mais é que uma “senha” gerada pelo próprio github e que
deve ser renovada com certa periodicidade. <strong>O GitHub não permite
mais autenticações via senha, apenas usando o PAT</strong>. Portanto, o
último passo para integrar o R, RStudio, Git e GitHub é informar o PAT.
Precisaremos fazer isso apenas uma vez, e repetir apenas quando o PAT
expirar. Vamos começar gerando o PAT. Para informações mais detalhadas
sobre o PAT você pode acessar <a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens">esta</a>
página.</p>
<p>Para configurar o PAT vamos usar primeiro o pacote
<code>usethis</code> e depois vamos utilizar as funcionalidades do
pacote <code>gitcreds</code>.Digite a linha de código no seu console do
R:</p>
<div class="sourceCode" id="cb7"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb7-1"><a href="#cb7-1" tabindex="-1"></a><span class="fu">library</span>(usethis)</span>
<span id="cb7-2"><a href="#cb7-2" tabindex="-1"></a><span class="fu">create_github_token</span>()</span></code></pre></div>
<p>Isso abrirá uma guia no seu navegador para que você gere um token,
tal como mostrado na imagem abaixo</p>
<div class="figure" style="text-align: center">
<img src="figs/PAT-creation.png" alt="Exemplo da página do GitHub para gerar um token" width="1209" />
<p class="caption">
Exemplo da página do GitHub para gerar um token
</p>
</div>
<p>Você verá inúmeras opções de acesso. As caixinhas que vamos escolher
vai depender do grau de controle que você deseja ter para usar o GitHub
via Rstudio.</p>
<p>Após gerado, <strong>guarde esse token com carinho</strong>, pois ele
vai ser sua nova senha de entrada para o GitHub via RStudio, quando for
requerido. Para armazenar senhas e dados eu sugiro o programa
<strong>LastPass</strong>.</p>
<p>Próximo passo é registar esse token gerado em nosso computador. Para
tanto, faça o seguinte:</p>
<div class="sourceCode" id="cb8"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb8-1"><a href="#cb8-1" tabindex="-1"></a><span class="fu">library</span>(gitcreds)</span>
<span id="cb8-2"><a href="#cb8-2" tabindex="-1"></a>gitcreds<span class="sc">::</span><span class="fu">gitcreds_set</span>()</span></code></pre></div>
<p>No console aparecerá a mensagem para digitar o token, copie o token e
cole direto no navegador, pressione enter e pronto, seu RStudio está
autenticado e agora está devidamente conectado com o repositório remoto.
Estamos pronto para o nosso primeiro commit!!!!</p>
</div>
</div>
<div id="conectando-git-rstudio-e-github-pela-primeira-vez"
class="section level1">
<h1>Conectando Git, RStudio e Github pela primeira vez</h1>
<p>Antes de começar a utilizar o Git e GitHib via RStudio vamos primeiro
dar uma olhadinha no site do GitHub. Abra o GitHub, faça o seu login e
vamos dar uma explorada por lá.</p>
<p>Após esse passeio pelo GitHub, vamos criar nosso repositório para
esta aula. Só lembrando que para fazer isso você já precisa ter uma
conta criada no GitHub e o Git instalado. Tendo sua conta feita vá o seu
navegador de internet, acesse o site do GitHub e faça o login. Feito
isso:</p>
<p>1 - Crie um repositório</p>
<p>Crie um novo repositório clicando no botão destacado na figura
abaixo</p>
<div class="figure" style="text-align: center">
<img src="figs/Create-Reppo.png" alt="Criando um novo repositório a partir do GitHub" width="1260" />
<p class="caption">
Criando um novo repositório a partir do GitHub
</p>
</div>
<p>Existem outras formas de iniciar um repositório, inclusive direto
pelo RStudio, mas vamos pelo caminho mais simples por enquanto.</p>
</div>
<div id="o-abc-do-versionamento-clone-pull-push-and-commits"
class="section level1">
<h1>O ABC do versionamento: Clone, Pull, Push and Commits</h1>
<p>Vimos nas aulas teóricas que essas palavrinhas não são nada mais que
ações que praticamos no nosso dia-a-dia. Agora é hora de colocar em
prática.</p>
<p>Já temos um repositório remoto, agora precisamos que ele exista em
nossos computadores para que possamos sincronizar nosso trabalho local e
remoto. De maneira geral o que queremos fazer a partir de agora está
ilustrado na figura seguinte</p>
<p><img src="figs/version-control-all.png" width="55%" style="display: block; margin: auto;" /></p>
<p>A partir de agora iremos, passo a passo, realizar todas as funções
básicas essenciais para organização computacional de um projeto
científico.</p>
<p>O primeiro passo é realizar uma clonagem!</p>
<div id="o-clone" class="section level2">
<h2>O Clone</h2>
<div class="figure" style="text-align: center">
<img src="figs/o-clone.jpeg" alt="Referência de velho" width="55%" />
<p class="caption">
Referência de velho
</p>
</div>
<p>Para que nosso repositório local esteja ligado ao nosso repositório
remoto precisamos primeiro conectá-los. Fazemos isso ao clonar o
repositório remoto em nossa máquina. Clonar (clone) nesse caso não é
nada mais que criar uma cópia exata de um repositório remoto em sua
máquina. A partir desse momento esses repositórios estarão conectados
até que o Git os separe.</p>
<p>Para clonar vá até o repositório remoto de interesse, e copie a chave
https, como mostrado na figura a seguir:</p>
<p><img src="figs/github-copy-https.png" width="1264" style="display: block; margin: auto;" /></p>
<p>Clique no botão de cópia e vamos para o RStudio. No RStudio vá em
<code>File</code> e depois <code>New Project</code>. A partir daí siga
as imagens abaixo:</p>
<div id="copiando-a-chave-https-no-github" class="section level3">
<h3>1. Copiando a chave https no GitHub</h3>
<div class="figure" style="text-align: center">
<img src="figs/github-copy-https.png" alt="Copiando chave https" width="1264" />
<p class="caption">
Copiando chave https
</p>
</div>
</div>
<div id="criando-um-novo-projeto-localmente" class="section level3">
<h3>2. Criando um novo <strong>projeto</strong> localmente</h3>
<div class="figure" style="text-align: center">
<img src="figs/github-versioncontrol-option.png" alt="Abrindo um novo projeto" width="1142" />
<p class="caption">
Abrindo um novo projeto
</p>
</div>
</div>
<div id="colando-a-chave-para-ligar-o-repositório-remoto-com-o-local"
class="section level3">
<h3>3. Colando a chave para ligar o repositório remoto com o local</h3>
<div class="figure" style="text-align: center">
<img src="figs/github-paste-https.png" alt="Colando a chave https" width="1146" />
<p class="caption">
Colando a chave https
</p>
</div>
<p>Ao clicar em <code>Create project</code> o repositório remoto será
imediatamente transferido para o seu computador. Uma pasta (o diretório
local) será criado no local que você escolheu e, assim, RStudio, Git e
Github estarão plenamente conectados. Tudo certo até aqui? Uma pausa
para descanso com um vídeo.</p>
<div class="vembedr">
<div>
<iframe src="https://www.youtube.com/embed/j7K3s_vi_1Y" width="533" height="300" frameborder="0" allowfullscreen="" data-external="1"></iframe>
</div>
</div>
</div>
</div>
<div id="pull-commits-e-push" class="section level2">
<h2>Pull, Commits e Push</h2>
<p>Se você chegou até aqui sem erros isso quer dizer que Git e GitHub já
estão integrados no RStudio. Portanto, qualquer coisa que fizermos nesta
pasta está sendo observado a partir de agora pelo git. Para
certirficar-se disso, habilite a visualização de arquivos ocultos no seu
computador, você vai notar que na raiz desta pasta clonada existe uma
pasta <code>.git</code>, como na figura a seguir</p>
<p><img src="figs/git-inside-folder.png" width="204" style="display: block; margin: auto;" /></p>
<p>Se você consegue ver esta pasta quer dizer que está tudo certo, e o
git está observando (<strong>watch</strong> no jargão do versionamento)
cada modificação e cada arquivo dentro desta pasta (a menos que você
inclua o arquivo no .gitignore, mas isso é assunto para outro
momento).</p>
<p><img src="figs/big-brother-watching.png" width="55%" style="display: block; margin: auto;" /></p>
<p>Agora iremos executar funções que, até o fim deste curso, serão quase
automáticas no nosso fluxo de trabalho com versionamento.</p>
<div id="meu-primeiro-commit" class="section level3">
<h3>Meu primeiro commit</h3>
<p>O que é um commit?</p>
<p>Commit, ou “revisão”, é uma mudança individual em um arquivo ou um
conjunto de arquivos dentro da pasta observada pelo git. Os commits são
como check-points para o nosso repositório. Uma analogia interessante
para os commits foi apresentada na aula e está ilustrada aqui, na figura
seguinte</p>
<p>Vamos pensar que nosso projeto é uma montanha, e estamos escalando
ele. Nosso objetivo final é, obviamente, finalizar o projeto, chegando
ao topo da montanha. A medida que progredimos,caso venhamos a cometer um
erro, a queda pode ser grande. Desta maneira, utilizamos grampos onde
ancoramos nossa corda a medida que a escalada progride. Em caso de erro,
a queda será apenas até o grampo anterior onde a corda foi ancorada. Os
commits servem como os clipes que ancoram a corda a medida que
progredimos no projeto. Se cometermos um erro em algum arquivo, tudo
certo, podemos voltar no commit anterior, ou anteriores, para tentar
descobrir onde o erro foi cometido.</p>
<p>Da mesma forma que na escalada, se utilizarmos clipes muito pertinhos
uns dos outros vamos ficar lentos demais, e o progresso até o topo será
comprometido, se fizermos muitos commits será difícil voltar em momentos
específicos do projeto, visto que terão muitos commits para serem
checados. Portanto, a regra é: faça commits com parcimonia, ou seja, nem
muitos, nem poucos.</p>
<p>Vamos fazer uma modificação na nossa pasta. Podemos adicionar
arquivos, já que ela está vazia. Para tanto vamos usar os arquivos do
pacote de dados palmer penguins que estão nesse repositório. Lembre-se
de ler os arquivos utilizando o <code>{here}</code> e utilizar o
Rproject para abrir o diretório</p>
<div class="sourceCode" id="cb9"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb9-1"><a href="#cb9-1" tabindex="-1"></a>data_penguins <span class="ot"><-</span> <span class="fu">read.csv</span>(here<span class="sc">::</span><span class="fu">here</span>(<span class="st">"data"</span>, <span class="st">"data-penguins.csv"</span>)) </span></code></pre></div>
<p><strong>Obs</strong> se quiserem usar seus próprios dados fiquem a
vontade, o uso do palmerpenguins é apenas opcional e a título de
procedimento didático.</p>
<p>Caso estejam trabalhando com seus próprios dados, jogue os arquivos
para dentro do diretório que clonamos. O próximo passo é fazer nosso
primeiro commit.</p>
</div>
<div id="explorando-commits" class="section level3">
<h3>Explorando commits</h3>
<p><img src="figs/commit-safe.png" width="70%" style="display: block; margin: auto;" />
Existem duas formas de fazer versionamento usando o Git e Github via
RStudio. Uma delas é a linha de comando, a outra é via uma interface
visual, que nesse caso é o próprio RStudio. Vamos começar fazendo o
versionamento via interface visual. A opção para isso é que ninguém se
assuste num primeiro momento com a linha de comando, e que isso não seja
um impeditivo para utilizar o versionamento no seu fluxo de trabalho. A
maioria dos comandos básicos podem ser executados através desta
interface gráfica que chamamos de <strong>Git Client</strong></p>
<p>Repare que seu RStudio agora tem algumas coisas novas.
Especificamente, veja que agora ele tem uma aba chamada Git, como
ilustrado na figura abaixo</p>
<p><img src="figs/git-tab-rstudio.png" width="1225" style="display: block; margin: auto;" /></p>
<p>Isso indica que o git está funcionando no seu diretório, e agora
podemos fazer o versionamento deste diretório local e sincronizá-lo com
o repositório remoto.</p>
<p>Tudo e qualquer coisa que for adicionado ou modificado na sua pasta
vai aparecer na janela abaixo da aba git. Como mostrado na figura
abaixo</p>
<p><img src="figs/git-tab-rstudio2.png" width="1225" style="display: block; margin: auto;" /></p>
<p>Como eu mencionei na aula teórica e aqui acima, o commit é como um
track changes do word, mas melhor. Precisamos fazer um track change
manual, indicando o que foi modificado, isso é o nosso commit. Para
realizar um commit via a interface do RStudio você precisa:</p>
<p>1 - Clicar no botão <code>commit pending changes</code> (ou em
qualquer botão naquela aba), como mostrado abaixo</p>
<p><img src="figs/git-tab-rstudio3.png" width="1219" style="display: block; margin: auto;" /></p>
<p>2 - Isso vai abrir uma nova janela, nela você deve selecionar nos
checkbox os arquivos (vamos dar uma olhada nessa janela antes de
prosseguir)</p>
<p><img src="figs/git-tab-rstudio4.png" width="1003" style="display: block; margin: auto;" /></p>
<p>3 - Escreva uma mensagem informativa. Como este é o primeiro commit
geralmente selecionamos todos os arquivos e escrevemos a mensagem
<code>First commit</code> para indicar que é o primeiro commit deste
repositório</p>
<p><img src="figs/git-tab-rstudio5.png" width="994" style="display: block; margin: auto;" /></p>
<p><strong>OBS</strong> A mensagem deve ser realmente informativa, o
commit fica armazenado no seu repositório e aparecerá publicamente caso
o repositório seja público.</p>
<p><img src="figs/commit-meme.png" width="60%" style="display: block; margin: auto;" /></p>
<p>Pronto, o que fizemos agora foi basicamente colocar nossos arquivos
na <strong>stagging area</strong> (marcar as checking box) e prepará-los
para a entrega com uma mensagem informativa, o commit. Agora precisamos
enviar os arquivos para o repositório remoto (upstream)</p>
</div>
<div id="meu-primeiro-push" class="section level3">
<h3>Meu primeiro push</h3>
<p>Temos um diretório functionando com o git, ligado ao github, com
documentos dentro, mas, até agora ele apenas vive em nossos
computadores. Chegou a hora de empurrar estes documentos para o
diretório remoto, ou seja, aquele que clonamos lá no início. Para tanto
vamos fazer um <code>push</code></p>
<p>O push nada mais é que empurrar os documentos para o repositório do
github, chamado as vezes de <code>origin/master</code> e outras vezes
<code>origin/main</code>, mas ambos querem dizer “um repositório remoto
o qual o diretório que estou trabalhando está ligado”.</p>
<p>Sem mais delongas, para fazer um push precisamos apenas apertar o
botão verde como mostrado na figura abaixo</p>
<p><img src="figs/git-tab-rstudio6.png" width="997" style="display: block; margin: auto;" /></p>
<p>Duas coisas são importantes notar nesse momento. Primeiro o botão de