Skip to content
Snippets Groups Projects
cap04.tex 26.7 KiB
Newer Older
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
% \documentclass[
%   ]{article}

\documentclass[
  a5paper,
  pagesize,
  9pt,
  % bibtotoc,
  pointlessnumbers,
  normalheadings,
  % DIV=9,
  twoside=false
]{book}

\usepackage[brazil]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage[sc]{mathpazo}
% \usepackage{palatino}
% \linespread{1.05} 
\usepackage[scaled=0.85]{beramono}

%-----------------------------------------------------------------------

\usepackage{amssymb, amsmath}
\usepackage{ifxetex, ifluatex}

\usepackage{fixltx2e} % provides \textsubscript
\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex
  \usepackage[T1]{fontenc}
  \usepackage[utf8]{inputenc}
\else % if luatex or xelatex
  \ifxetex
    \usepackage{mathspec}
    \usepackage{xltxtra,xunicode}
  \else
    \usepackage{fontspec}
  \fi
  \defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase}
  \newcommand{\euro}{}
\fi

% use upquote if available, for straight quotes in verbatim environments
\IfFileExists{upquote.sty}{\usepackage{upquote}}{}
% use microtype if available
\IfFileExists{microtype.sty}{%
\usepackage{microtype}
\UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts
}{}






\usepackage{color}
\usepackage{fancyvrb}
\newcommand{\VerbBar}{|}
\newcommand{\VERB}{\Verb[commandchars=\\\{\}]}
\DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\}}
% Add ',fontsize=\small' for more characters per line
\usepackage{framed}
\definecolor{shadecolor}{RGB}{248,248,248}
\newenvironment{Shaded}{\begin{snugshade}}{\end{snugshade}}
\newcommand{\KeywordTok}[1]{\textcolor[rgb]{0.13,0.29,0.53}{\textbf{{#1}}}}
\newcommand{\DataTypeTok}[1]{\textcolor[rgb]{0.13,0.29,0.53}{{#1}}}
\newcommand{\DecValTok}[1]{\textcolor[rgb]{0.00,0.00,0.81}{{#1}}}
\newcommand{\BaseNTok}[1]{\textcolor[rgb]{0.00,0.00,0.81}{{#1}}}
\newcommand{\FloatTok}[1]{\textcolor[rgb]{0.00,0.00,0.81}{{#1}}}
\newcommand{\CharTok}[1]{\textcolor[rgb]{0.31,0.60,0.02}{{#1}}}
\newcommand{\StringTok}[1]{\textcolor[rgb]{0.31,0.60,0.02}{{#1}}}
\newcommand{\CommentTok}[1]{\textcolor[rgb]{0.56,0.35,0.01}{\textit{{#1}}}}
\newcommand{\OtherTok}[1]{\textcolor[rgb]{0.56,0.35,0.01}{{#1}}}
\newcommand{\AlertTok}[1]{\textcolor[rgb]{0.94,0.16,0.16}{{#1}}}
\newcommand{\FunctionTok}[1]{\textcolor[rgb]{0.00,0.00,0.00}{{#1}}}
\newcommand{\RegionMarkerTok}[1]{{#1}}
\newcommand{\ErrorTok}[1]{\textbf{{#1}}}
\newcommand{\NormalTok}[1]{{#1}}



\usepackage{graphicx}
\makeatletter
\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi}
\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi}
\makeatother
% Scale images if necessary, so that they will not overflow the page
% margins by default, and it is still possible to overwrite the defaults
% using explicit options in \includegraphics[width, height, ...]{}
\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio}

\ifxetex
  \usepackage[setpagesize=false, % page size defined by xetex
              unicode=false, % unicode breaks when used with xetex
              xetex]{hyperref}
\else
  \usepackage[unicode=true]{hyperref}
\fi

\hypersetup{breaklinks=true,
            bookmarks=true,
            pdfauthor={PET Estatística UFPR},
            pdftitle={Projetos Remotos},
            colorlinks=true,
            citecolor=blue,
            urlcolor=blue,
            linkcolor=magenta,
            pdfborder={0 0 0}}
\urlstyle{same}  % don't use monospace font for urls



\setlength{\parindent}{0pt}
\setlength{\parskip}{6pt plus 2pt minus 1pt}
\setlength{\emergencystretch}{3em}  % prevent overfull lines

\setcounter{secnumdepth}{5}


%%% Use protect on footnotes to avoid problems with footnotes in titles
\let\rmarkdownfootnote\footnote%
\def\footnote{\protect\rmarkdownfootnote}

%%% Change title format to be more compact
\usepackage{titling}

% Create subtitle command for use in maketitle
\newcommand{\subtitle}[1]{
  \posttitle{
    \begin{center}\large#1\end{center}
    }
}

\setlength{\droptitle}{-2em}

  \title{Projetos Remotos}
  \pretitle{\vspace{\droptitle}\centering\huge}
  \posttitle{\par}

  \author{PET Estatística UFPR}
  \preauthor{\centering\large\emph}
  \postauthor{\par}

  \date{}
  \predate{}\postdate{}

\usepackage{menukeys}

\begin{document}

\maketitle


{
\hypersetup{linkcolor=black}
\setcounter{tocdepth}{2}
\tableofcontents
}



\chapter{Projetos Remotos}

Nos capítulos anteriores descrevemos como instalar o Git e ter projetos
versionados. No entanto, o uso do Git até então foi apenas local. Os
arquivos eram mantidos na sua máquina de trabalho e disponíveis só para
você.

Os recursos do Git, como o desenvolvimento em \emph{branches}, permite
que vários segmentos sejam conduzidos de forma independente e no futuro,
quando apropriado, reunidos em um único \emph{branch}. Isso é exatamente
o que precisamos para trabalhar em equipe, certo? Se cada colaborador
pudesse ter um ramo separado do projeto para trabalhar, todos poderiam
trabalhar simultâneamente. Quando oportuno, bastaria fazer merges para
reunir o trabalho. A questão é: como deixar o projeto disponível para os
colaboradores?

A resposta é simples: mantenha o projeto em um servidor onde os
colaboradores tenham acesso. Isso inclusive vai permitir que você acesse
o projeto de várias outras máquinas, como o \emph{notebook} de casa e o
desktop do \emph{escritório}.

\section{Repositório remoto pessoal}\label{repositorio-remoto-pessoal}

O repositório remoto serve de centro do seu repositório Git. Como ele
está em um servidor que você tem acesso, você pode compartilhar o
repositório com outras máquinas, clonado de lá. Ele serve como
\emph{backup} do repositório.

Aqui não se trabalha em colaboração mas o processo permite acessar o
repositório, transferir arquivos de várias máquinas suas.

\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{## Autenticar no servidor (logar).}
\KeywordTok{ssh} \NormalTok{eu@servidor}

\CommentTok{## Verificar se a máquina tem o Git, se não instalar.}
\KeywordTok{git} \NormalTok{--version}

\CommentTok{## Criar um diretório para conter o projeto.}
\KeywordTok{mkdir} \NormalTok{-p ~/meusProjetos/meu1repo}
\KeywordTok{cd} \NormalTok{~/meusProjetos/meu1repo}

\CommentTok{## Começar um projeto Git remoto. Note a opção --bare.}
\KeywordTok{git} \NormalTok{--bare init}
\end{Highlighting}
\end{Shaded}

Apenas isso precisa ser feito no servidor. Você não cria nenhum arquivo
pelo servidor. Inclusive, muitos dos comandos Git, como
\texttt{git status} não funcionam para repositório iniciados com a opção
\texttt{git -\/-bare init}.

Caso queira, você também pode usar \texttt{git init}. A diferença entre
eles é só onde ficam os arquivos do versionamento. Com
\texttt{git init}, um diretório oculto \texttt{.git/} é o repositório
Git e os arquivos de trabalho, como o \texttt{README.md}, ficam ao lado
dele na estrutura de diretório. Com \texttt{git -\/-bare init} o
conteúdo do repositório Git fica na raíz. Essa última opção é justamente
para criar repositórios remotos que vão justamente manter a parte
repositório e não os arquivos.

\begin{verbatim}
git init                  git --bare init
.                         .
|-- .git                  |-- branches
|   |-- branches          |-- config
|   |-- config            |-- description
|   |-- description       |-- HEAD
|   |-- HEAD              |-- hooks
|   |-- hooks             |-- info
|   |-- info              |-- objects
|   |-- objects           +-- refs
|   +-- refs
+-- README.md
\end{verbatim}

Uma vez iniciado o repositório no servidor, todo trabalho passa ser
local. É a vez de adicionar o endereço do diretório no servidor e
transferir arquivos.

\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{## Agora na sua máquina local, adicione o endereço do remoto.}
\KeywordTok{git} \NormalTok{remote add eu@server:~/meusProjetos/meu1repo}

\CommentTok{## Exibir os endereços remotos.}
\KeywordTok{git} \NormalTok{remote -v}
\end{Highlighting}
\end{Shaded}

Esse endereço pode ter IP, porque na realidade, todo servidor tem um IP.
Por exemplo, o servidor do tem o IP 192.30.252.129. Para saber o IP é só
dar um \emph{ping} no endereço.

\begin{Shaded}
\begin{Highlighting}[]
\KeywordTok{ping} \NormalTok{github.com}
\KeywordTok{ping} \NormalTok{gitlab.com}
\KeywordTok{ping} \NormalTok{google.com}
\KeywordTok{ping} \NormalTok{cran.r-project.org}
\end{Highlighting}
\end{Shaded}

Normalmente, servidores de escritório não tem um endereço nominal,
apenas o IP (numérico). É necessário registrar domínio para ter nominal.

\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{## Agora na sua máquina local, adicione o endereço do remoto.}
\KeywordTok{git} \NormalTok{remote add eu@111.22.333.44:~/meusProjetos/meu1repo}
\end{Highlighting}
\end{Shaded}

Nesse processo, toda transferência de arquivos vai pedir senha do seu
usuário no servidor. Para facilitar, pode-se trabalhar com chaves
públicas.

O arquivo \texttt{id\_rsa.pub} é a sua chave pública. O \texttt{id\_rsa}
é o seu par. RSA é o tipo de encriptação. O nome e caminho do arquivo e
a encriptação podem ser outros, depende do que você escolher ao gerar o
par de chaves. Normalmente usa-se RSA e as chaves são criadas no
diretório \texttt{\textasciitilde{}/.ssh}.

\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{## Exibir chaves públicas.}
\KeywordTok{cat} \NormalTok{~/.ssh/id_rsa.pub}

\CommentTok{## Caso não tenha, gerar.}
\KeywordTok{ssh-keygen} \NormalTok{-t rsa -C }\StringTok{"eu@dominio.com"}
\end{Highlighting}
\end{Shaded}

No servidor, o arquivo \texttt{authorized\_keys2} contém as chaves
públicas das máquinas com acesso permitido sem senha. Esse arquivo nada
mais é que uma coleção de chaves. O conteúdo dele são as chaves das suas
máquinas, ou das máquinas de outros usuários, conteúdo do
\texttt{id\_rsa.pub}, uma embaixo da outra, conforme o exemplo
abaixo\footnote{O Flash foi o
primeiro a transferir as chaves para o servidor porque ele é mais
rápido}.

\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{## `authorized_keys` do servidor da Liga da Justiça.}
\KeywordTok{ssh-rsa} \NormalTok{IyBUrjvUdSMY... flash@justiceleague.org}
\KeywordTok{ssh-rsa} \NormalTok{AAAAB3NzaC1y... batman@justiceleague.org}
\KeywordTok{ssh-rsa} \NormalTok{Mdju17IdXhSd... superman@justiceleague.org}
\end{Highlighting}
\end{Shaded}

\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{## Logar no servidor}
\KeywordTok{ssh} \NormalTok{eu@111.22.333.44}

\CommentTok{## Criar o diretório/arquivo para as chaves públicas.}
\KeywordTok{mkdir} \NormalTok{~/.ssh}
 \KeywordTok{>} \KeywordTok{authorized_keys2}
\end{Highlighting}
\end{Shaded}

Agora é preciso transferir o conteúdo do seu arquivo local
\texttt{id\_rsa.pub} para o \texttt{authorized\_keys2} que fica no
servidor. O jeito mais simples de fazer isso é com transferência
\emph{scp} mas a instrução \emph{ssh} abaixo também resolve.

\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{## Transfere arquivo para diretório temporário.}
\KeywordTok{scp} \NormalTok{~/.ssh/id_rsa.pub eu@111.22.333.44:/tmp}

\CommentTok{## Cola o conteúdo do *.pub no final do authorized_keys.}
\KeywordTok{ssh} \NormalTok{eu@111.22.333.44\textbackslash{}}
  \StringTok{"cat /tmp/id_rsa.pub ~/.ssh/authorized_keys"}

\CommentTok{## Faz os dois passos anteriores de uma vez só.}
\KeywordTok{ssh} \NormalTok{eu@111.22.333.44\textbackslash{}}
  \StringTok{"cat >> ~/.ssh/authorized_keys2"} \KeywordTok{<} \NormalTok{~/.ssh/id_rsa.pub}
\end{Highlighting}
\end{Shaded}

\section{Repositório remoto coletivo}\label{repositorio-remoto-coletivo}

A única diferença é recomendamos você criar um novo usuário e adicionar
as chaves públicas de todos os membros. Evite adicionar chaves públicas
para usuários na sua conta porque isso expõe seus documentos, alguma
operação desastrosa por parte de alguém pode comprometê-los. Por isso,
crie um usuário, por exemplo \texttt{gitusers}, para na conta manter o
repositório remoto.

Solicite que os colaboradores gerem as chaves públicas e te enviem o
arquivo \texttt{id\_rsa.pub}. Depois você adiciona cada chave ao
\texttt{authorized\_keys} da conta \texttt{gitusers}. Com chaves
autorizadas, os colaboradores podem transferir arquivos, podem logar no
servidor mas não podem instalar nada, a menos que você passe a senha do
usuário \texttt{gitusers}. Para crias usuários no servidor, você precisa
de privilégios de \emph{admin}.

\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{## Logar na servidora.}
\KeywordTok{ssh} \NormalTok{eu@servidor}

\CommentTok{## No servidor, criar uma conta para o projeto.}
\KeywordTok{sudo} \NormalTok{adduser gitusers}
\end{Highlighting}
\end{Shaded}

Vamos assumir que você têm os arquivos \texttt{*.pub} dos colaboradores
no diretório \texttt{/chaves} devidamente identificados pelo nome deles.
O comando abaixo acrescenta as chaves deles uma embaixo da outra no
\texttt{authorized\_keys}.

\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{## Entra no diretório com os arquivos *.pub.}
\CommentTok{## Existem várias: angela.pub, jhenifer.pub, ...}
\KeywordTok{cd} \NormalTok{chaves}

\CommentTok{## Juntar as chaves em um único arquivo.}
\KeywordTok{cat} \NormalTok{*.pub }\KeywordTok{>} \NormalTok{todos.pub}

\CommentTok{## Copiar o conteúdo do arquivo pro authorized_keys2.}
\KeywordTok{ssh} \NormalTok{gitusers@111.22.333.44\textbackslash{}}
  \StringTok{"cat >> ~/.ssh/authorized_keys2"} \KeywordTok{<} \NormalTok{todos.pub}
\end{Highlighting}
\end{Shaded}

\section{Fluxo de trabalho com repositório remoto, do clone ao
push}\label{fluxo-de-trabalho-com-repositorio-remoto-do-clone-ao-push}

\subsection{Git clone}\label{git-clone}

Este comando é usado para clonar um repositório do servidor remoto para
um servidor local, caso você queira copiar um repositório que já existe
para realizar colaborações em um projeto que queira participar. Você
terá acesso a todos os arquivos e poderá verificar as diferentes versões
destes. Supondo que sua equipe de trabalho possue uma biblioteca Git
\textbf{Teste Clone}, onde são armazenados todos os arquivos. Você pode
clonar estes arquivos para o seu diretório de trabalho e assim
modificá-los conforme deseja.

\textbf{Exemplo:}

\begin{Shaded}
\begin{Highlighting}[]
\KeywordTok{git} \NormalTok{clone git@gitlab.c3sl.ufpr.br:pet-estatistica/TesteClone.git}
\end{Highlighting}
\end{Shaded}

Desta forma você terá um diretório \texttt{TesteClone} em seu
computador, onde estarão todos os arquivos do projeto nele.

Você também terá a opção de clonar o repositório \texttt{TesteClone} em
um diretório diferente do padrão Git, que no próximo exemplo
denominaremos de \texttt{DirTeste}:

\textbf{Exemplo:}

\begin{Shaded}
\begin{Highlighting}[]
\KeywordTok{git} \NormalTok{clone git@gitlab.c3sl.ufpr.br:pet-estatistica/TesteClone.git DirTeste}
\end{Highlighting}
\end{Shaded}

\subsection{Git Push}\label{git-push}

Após clonar e realizar contribuições ao projeto, você pode enviá-los
para o repositório remoto. Estes arquivos, após o \texttt{Git push},
estarão prontos para serem integrados ao projeto com o
\texttt{merge}.\\Usado para transferência de arquivos entre repositório
local e o servidor remoto. Como o nome já diz, o comando empurra os
arquivos para o servidor remoto. No exemplo abaixo enviaremos a
ramificação \texttt{Branch Master} para o servidor chamado
\texttt{origin}:

\textbf{Exemplo:}

\begin{Shaded}
\begin{Highlighting}[]
\KeywordTok{git} \NormalTok{push origin master}
\end{Highlighting}
\end{Shaded}

É importante ressaltar que se dois usuários clonarem ao mesmo tempo,
realizarem modificações e enviarem os arquivos atualizados ao
repositório utilizando o \texttt{Git push}, as modificações do usuário
que realizou o push por último serão desconsideradas.

\subsection{Git Pull}\label{git-pull}

Para obter todos os arquivos presentes no projeto, você pode importar os
arquivos do branch \texttt{master}. Toda vez que você utilizar o
\texttt{Git pull} a última versão de todos os arquivos estarão no seu
diretório. Este comando é utilizado para transferência de arquivos. O
comando puxa os arquivos do servidor remoto para o repositório local e
faz o merge do mesmo, fundindo a última versão com a versão atualizada.

\textbf{Exemplo:}

\begin{Shaded}
\begin{Highlighting}[]
\KeywordTok{git} \NormalTok{pull origin master}
\end{Highlighting}
\end{Shaded}

\subsection{Git fetch}\label{git-fetch}

Assim como o comando \texttt{Git pull}, o \texttt{Git fetch} transfere
arquivos do repositório remoto para o local, porém ele não realiza
automaticamente o merge dos arquivos transferidos, o usuário deve fazer
o merge manualmente.

\textbf{Exemplo:}

\begin{Shaded}
\begin{Highlighting}[]
\KeywordTok{git} \NormalTok{fetch origin master}
\end{Highlighting}
\end{Shaded}

Para verificar as modificações realizadas entre versões de um arquivo
basta utilizar o comando \texttt{git diff}:

\textbf{Exemplo:}

\begin{Shaded}
\begin{Highlighting}[]
\KeywordTok{git} \NormalTok{diff master origin/master}
\end{Highlighting}
\end{Shaded}

\section{Listar branches
locais/remotos}\label{listar-branches-locaisremotos}

O comando \texttt{git remote}, este é usado para verificar quais
repositórios estão configurados.

\textbf{Exemplo:} para retornar a lista de repositórios:

\begin{Shaded}
\begin{Highlighting}[]
\KeywordTok{git} \NormalTok{remote}
\end{Highlighting}
\end{Shaded}

No comando acima é possível visualizar o remoto padrão \textbf{origin}
(URL SSH para onde será possível enviar os seus arquivos).

\textbf{Exemplo:} para retornar o nome dos repositórios com a URL onde
foram armazanados:

\begin{Shaded}
\begin{Highlighting}[]
\KeywordTok{git} \NormalTok{remote -v}
\end{Highlighting}
\end{Shaded}

\section{Adicionar, renomear, deletar
remote}\label{adicionar-renomear-deletar-remote}

\subsection{Adicionando repositórios
remotos}\label{adicionando-repositorios-remotos}

O comando \texttt{git remote add} adiciona um repositório remoto. No
exemplo a seguir será adicionado um repositório chamado \textbf{MeuRepo}
ao qual será vinculado a URL
\texttt{git@gitlab.c3sl.ufpr.br:pet-estatistica/apostila-git.git}.
Usaremos como exemplo o projeto Git \textbf{Apostila-git}.

\textbf{Exemplo:}

\begin{Shaded}
\begin{Highlighting}[]
\KeywordTok{git} \NormalTok{remote add MeuRepo git@gitlab.c3sl.ufpr.br:pet-estatistica/apostila-git.git}
\CommentTok{# Quando executamos novamente o comando para obter a lista de repositórios:}
\KeywordTok{git} \NormalTok{remote -v}
\end{Highlighting}
\end{Shaded}

Pare acessar localmente o branch master do projeto \textbf{Apostila-git}
será usado \texttt{MeuRepo/master}.

\subsection{Obtendo informações de um
Remoto}\label{obtendo-informacoes-de-um-remoto}

Você pode acessar as informações de qualquer repositório remoto com o
comando \texttt{git remote show}, que retornará a URL e os
\texttt{branches}.

\textbf{Exemplo:}

\begin{Shaded}
\begin{Highlighting}[]
\KeywordTok{git} \NormalTok{remote show origin}
\end{Highlighting}
\end{Shaded}

\subsection{Renomeado Remotos}\label{renomeado-remotos}

O comando \texttt{git remote rename} pode modificar o nome de um
repositório remoto. A seguir o repositório \texttt{MeuRepo}será
renomeado para \texttt{RenameRepo}.

\textbf{Exemplo:}

\begin{Shaded}
\begin{Highlighting}[]
\KeywordTok{git} \NormalTok{remote rename MeuRepo RenameRepo}
\end{Highlighting}
\end{Shaded}

\subsection{Removendo Remotos}\label{removendo-remotos}

Para remover remotos é utilizado o comando \texttt{git remote rm}, agora
será removido o repositório renomeado anteriormente \texttt{RenameRepo}.

\textbf{Exemplo:}

\begin{Shaded}
\begin{Highlighting}[]
 \KeywordTok{git} \NormalTok{remote rm RenameRepo}
\end{Highlighting}
\end{Shaded}

\subsection{Deletar ramos no servidor}\label{deletar-ramos-no-servidor}

Quando houver um branch que não está sendo utilizado ou está concluído,
há a opção de excluí-lo do servidor.\\Se for necessário apagar branches
remotos, podemos utilizar o comando a seguir:

\textbf{Exemplo:}

\begin{Shaded}
\begin{Highlighting}[]
\KeywordTok{git} \NormalTok{push origin --delete }\KeywordTok{<}\NormalTok{branch}\KeywordTok{>}
\end{Highlighting}
\end{Shaded}

\subsection{Clonar apenas um \emph{branch}, \emph{commit} ou
\emph{tag}.}\label{clonar-apenas-um-branch-commit-ou-tag.}

É possível clonar apenas um branch e não o repositório Git completo.
Supondo que no repositório há um branch chamado \texttt{MeuBranch}
dentro do repositório \texttt{MeuRepo}, clonaremos o branch.

\textbf{Exemplo:}

\begin{Shaded}
\begin{Highlighting}[]
\KeywordTok{git} \NormalTok{clone -b MeuBranch --single-branch git://sub.domain.com/MeuRepo.git}
\end{Highlighting}
\end{Shaded}

O Git ainda permite clonar um commit ou tag.

\textbf{Exemplo:}

\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{# Para uma tag:}
\KeywordTok{git} \NormalTok{-e: //git.myproject.org/MyProject.git@v1.0#egg=MyProject}
\CommentTok{# Para um commit:}
\KeywordTok{git} \NormalTok{-e: //git.myproject.org/MyProject.git@da39a3ee5e6b4b0d3255bfef95601890afd80709#egg=MyProject}
\end{Highlighting}
\end{Shaded}

\section{Criando um Repositório Git}\label{criando-um-repositorio-git}

Primeiramente é necessário ter acesso a um servidor Linux com chave SSH,
no qual você poderá ter seus repositórios. É definido um diretório no
qual será armazenado o repositório remoto. No próximo exemplo é preciso
criar um repositório remoto chamado \texttt{MeuRepo} e o armazenar em um
diretório \texttt{\textasciitilde{}/git}:

\textbf{Exemplo:}

\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{# Para criar um diretório git na sua home:}
\KeywordTok{mkdir} \NormalTok{~/git}
\CommentTok{# Para criar um repositório git:}
\KeywordTok{mkdir} \NormalTok{MeuRepo.git}
\CommentTok{# Para definir MeuRepo como um repositório remoto:}
\KeywordTok{git} \NormalTok{--bare init}
\end{Highlighting}
\end{Shaded}

As configurações do servidor estão completas. A partir você pode
realizar os primeiros comandos para iniciar o repositório criado.

\section{Git no servidor}\label{git-no-servidor}

Primeiramente, para configurar o Git no Servidor e configurar os
protocolos, clonaremos o repositório existente em um repositório limpo.
\textbf{Observação:} você poderá colocar um repositório no Servidor se
este não contém um diretório de trabalho.

\textbf{Exemplo:}

\begin{Shaded}
\begin{Highlighting}[]
 \KeywordTok{git} \NormalTok{clone --bare MeuRepo MeuRepo.git}
\end{Highlighting}
\end{Shaded}

Acima foi criado um repositório limpo \texttt{MeuRepo.git}, no qual está
armazenada a cópia de todos os arquivos do diretorio Git.

Após este primeiro passo o repositório limpo será colocado no Servidor e
configurado os protolocos. No exemplo abaixo, supondo que você tem
configurado um servidor \texttt{git.servidor.com}, e um diretório
\texttt{/dir/git}no qual você quer armazenar seus repositórios. Ao
copiar o seu repositório limpo, você pode configurar seu novo
repositório.

\textbf{Exemplo:}

\begin{Shaded}
\begin{Highlighting}[]
\KeywordTok{scp} \NormalTok{-r MeuRepo.git usuario@git.example.com:/dir/git}
\end{Highlighting}
\end{Shaded}

Agora o repositório pode ser clonado por outros usuários, que podem ter
acesso de escrita e de envio de arquivos \texttt{push} no diretório.

\begin{Shaded}
\begin{Highlighting}[]
\KeywordTok{git} \NormalTok{clone usuario@git.example.com:/dir/git/MeuRepo.git}
\end{Highlighting}
\end{Shaded}

\section{Configuração de Conexão SSH com
Servidor}\label{configuracao-de-conexao-ssh-com-servidor}

O Git possibilita ao usuário realizar uma chave SSH que fará uma conexão
segura da sua máquina com o servidor. Para isso começamos com o seguinte
comando no terminal:

\textbf{Exemplo:}

\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{## Gerando uma chave ssh}
\KeywordTok{ssh-keygen} \NormalTok{-t rsa -C }\StringTok{"usuario@email.com"}
\end{Highlighting}
\end{Shaded}

A partir deste comando, será possível alterar o diretório onde será
salva a chave SSH. O usuário tem a opção de permanecer com o diretório
padrão, para isso basta apertar Enter. A partir disso, são criados dois
arquivos no diretório, o \texttt{id\_rsa} e o \texttt{id\_rsa.pub}. Após
escolher o diretório onde serão salvos os arquivos, você terá a opção de
digitar uma senha ou deixar o espaço em branco.

Para visualizar a chave basta digitar o seguinte comando:

\textbf{Exemplo:}

\begin{Shaded}
\begin{Highlighting}[]
\KeywordTok{cat} \NormalTok{~/.ssh/id_rsa.pub}
\end{Highlighting}
\end{Shaded}

A chave está no arquivo \texttt{id\_rsa.pub}. O usuário deve copiar o
texto deste arquivo na íntegra. Para gerar a conexão ssh com o servidor,
deve visitar o site
\href{https://gitlab.c3sl.ufpr.br/profile/keys}{\url{https://gitlab.c3sl.ufpr.br/profile/keys}}
e clicar em \href{https://gitlab.c3sl.ufpr.br/profile/keys/new}{Add SSH
Key}. É necessário escrever um título para a sua nova chave, no campo
\texttt{key} colar o texto copiado do arquivo \texttt{id\_rsa.pub} e
adicionar sua nova chave.

Para checar a configuração da sua máquina com o sevidor basta realizar o
seguinte comando:

\textbf{Exemplo:}

\begin{Shaded}
\begin{Highlighting}[]
\KeywordTok{ssh} \NormalTok{-T git@gitlab.c3sl.ufpr.br}
\end{Highlighting}
\end{Shaded}

\textbf{Configurando o servidor}

Agora será abordado como configurar o acesso SSH do ponto de vista do
servidor. Você precisa criar um usuário Git e um diretório \texttt{.ssh}
para este usuário.

\textbf{Exemplo:} criar usuário e diretório.

\begin{Shaded}
\begin{Highlighting}[]
\KeywordTok{sudo} \NormalTok{adduser git}
\KeywordTok{su} \NormalTok{git}
\KeywordTok{cd}
\KeywordTok{mkdir} \NormalTok{.ssh}
\end{Highlighting}
\end{Shaded}

Agora, você terá um arquivo chamado \texttt{authorized\_keys} onde será
adicionado uma chave pública de algum desenvolvedor. Após obter chaves
de alguns usuários, você pode salvá-las no arquivo
\texttt{authorized\_keys}, como no exemplo a seguir.

\textbf{Exemplo:}

\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{# chave do primeiro usuário}
\KeywordTok{cat} \NormalTok{/tmp/id_rsa1.pub }\KeywordTok{>>} \NormalTok{~/.ssh/authorized_keys}
\CommentTok{# chave do segundo usuário}
\KeywordTok{cat} \NormalTok{/tmp/id_rsa2.pub }\KeywordTok{>>} \NormalTok{~/.ssh/authorized_keys}
\KeywordTok{...}
\end{Highlighting}
\end{Shaded}

Depois de armazenar as chaves dos usuários, basta criar um repositório
limpo (sem um diretório de trabalho) para eles. Como visto
anteriormente:

\textbf{Exemplo:}

\begin{Shaded}
\begin{Highlighting}[]
\KeywordTok{cd/dir/git}
\KeywordTok{mkdir} \NormalTok{NovoProjeto.git}
\KeywordTok{cd} \NormalTok{NovoProjeto.git}
\KeywordTok{git} \NormalTok{-bare init}
\end{Highlighting}
\end{Shaded}

Agora os usuários, cujas chaves foram salvas no arquivo
\texttt{authorized\_keys} podem compartilhar arquivos no repositório com
os comando \texttt{git init}, \texttt{git add}, \texttt{git commit},
\texttt{git remote add} e \texttt{git push origin master}. %%---------------------------------------------------------------

\end{document}