O Git é um sistema de controle de versão.

Imagine que eu escrevo alguma coisa. Depois faço umas alterações. Depois outra pessoa faz mais alterações. E assim por diante.

O Git mantém um histórico dessas alterações: ele mantém um registro de quem fez o que e quando (Fulano adicionou essas linhas e removeu essas em data/hora, Ciclano apagou esse arquivo e adicionou esse outro em data/hora, etc). Esse histórico é chamado de "repositório".

O GitHub é um site onde vc pode guardar seu repositório e deixar disponível pra outras pessoas verem, e também baixarem, mudarem, enviarem as sugestões de mudança pra vc ("pull request"), etc.

Certo, então voce ta me dizendo que qualquer pessoa pode fazer essa alteração? é o que qualifica essa alteração como boa ou ruim, ja que existem tantas formas diferentes de fazer, essa alteração pode não agradar ao autor ou a uma comunidade que ta alterando? e se eu não gostar como eu faço para desfazer a alteração ou parte dela? Estou entendendo que essas alterações tem que passar por um criterio de aprovação ou não? existem coisa que sempre tem que ser alteradas? se existem porque ja não se faz da forma final?

quando voce fala historico eu entendo que as versões antes da anteração vao ficar la tambem acessiveis, é isso ne?

o github é como se fosse um grande forum onde todo mundo comenta de tudo sobre os codigos que entram ali? então no git eu não posso fazer isso de comentar ou so posso fazer isso no github?

Agora um pouco antes disso. Eu penso que o git vai servir para outras pessoas encontrarem junto comigo a solução para determinado parte do codigo que não funciona como eu queria, mas, existe algum codigo nesse meio que é tipo uma lenda, algo que foi colocado la e todos admiram ou que todos temem ou que ninguem altera porque funciona mas ninguem entende? existem 'tabus' desse nivel no git?

quando voce fala git e github o que se tem para aprender sobre eles? um livro resolve? ou é mais algo dinamico de ir fazendo e aprendendo? ou realmente precisa ser um especialista em git ou em github? um é mais importante que outro? temos que aprender isso antes de aprender a programar ou antes de aprender uma linguagem?

Sua palestra tambem esta muito interessante me deu muita informação e novas duvidas. obrigado por essa colaboração

desculpa mas o que é o pull request?

> Certo, então voce ta me dizendo que qualquer pessoa pode fazer essa alteração? é o que qualifica essa alteração como boa ou ruim, ja que existem tantas formas diferentes de fazer, essa alteração pode não agradar ao autor ou a uma comunidade que ta alterando? e se eu não gostar como eu faço para desfazer a alteração ou parte dela? Depende. Normalmente vc configura as permissões ao repositório, então geralmente não é qualquer um que pode fazer tudo. Quanto a alteração ser boa ou ruim, também depende (tanto de quem faz, quanto de quem avalia). Sempre tem como desfazer, o Git permite que vc [volte o arquivo como estava em algum momento passado](https://git-scm.com/docs/git-revert/), por exemplo. > Estou entendendo que essas alterações tem que passar por um criterio de aprovação ou não? Depende, existem várias formas de trabalhar. Vc pode ter pessoas que verificam o trabalho de outras, e podem aceitar ou rejeitar alterações, por exemplo. > existem coisa que sempre tem que ser alteradas? se existem porque ja não se faz da forma final? Sistemas mudam o tempo todo. Seja porque surgiu uma nova necessidade de negócio (lançar um produto novo, uma funcionalidade que não existia, o site precisa ser "modernizado", etc) ou adequação técnica (descobriram uma vulnerabilidade de segurança e precisa atualizar para uma nova versão, ou aplicar a correção), etc. Ou tem algo que só dá erro em um caso específico que ninguém pegou nos testes, aí precisa arrumar. Ou mudou alguma lei e o sistema precisa se adequar. Ou o programador estava com sono e fez tudo errado... Enfim, sempre tem o que mudar, impossível sair tudo perfeito da primeira vez, e improvável que tudo permaneça imutável pra sempre. > quando voce fala historico eu entendo que as versões antes da anteração vao ficar la tambem acessiveis, é isso ne? Sim, todas as versões ficam no repositório e podem ser consultadas a qualquer momento. > o github é como se fosse um grande forum onde todo mundo comenta de tudo sobre os codigos que entram ali? então no git eu não posso fazer isso de comentar ou so posso fazer isso no github? Eu diria que o GitHub é um "facilitador". Vc pode usar o Git sem o GitHub. Por exemplo, eu posso criar um repositório na minha máquina e deixá-lo acessível pra vc, e aí vc acessa diretamente minha máquina pra copiá-lo e para enviar alterações. O que o GitHub fez foi disponibilizar um site pra isso, então em vez de vc acessar minha máquina diretamente, eu deixo meu repositório no GitHub, e vc copia de lá. Se vc alterar algo, manda pra lá também, e eu posso aceitar ou rejeitar as alterações. Não é bem um fórum, mas vc pode abrir *issues* (que seriam similares aos "tópicos" de um fórum, embora não seja exatamente isso) para discutir alguma questão específica. A interface do site facilita esse tipo de interação (que poderia ser feita por outros meios, mas o GitHub meio que centraliza tudo isso em torno do repositório). > Agora um pouco antes disso. Eu penso que o git vai servir para outras pessoas encontrarem junto comigo a solução para determinado parte do codigo que não funciona como eu queria, mas, existe algum codigo nesse meio que é tipo uma lenda, algo que foi colocado la e todos admiram ou que todos temem ou que ninguem altera porque funciona mas ninguem entende? existem 'tabus' desse nivel no git? Isso existe desde sempre, mesmo antes do Git surgir. > quando voce fala git e github o que se tem para aprender sobre eles? um livro resolve? ou é mais algo dinamico de ir fazendo e aprendendo? ou realmente precisa ser um especialista em git ou em github? um é mais importante que outro? temos que aprender isso antes de aprender a programar ou antes de aprender uma linguagem? Eu gosto [desse livro](https://git-scm.com/book/en/v2) (tem em português, mas não sei se a tradução está boa), e depois que tiver passado do básico, tem [esse artigo](https://think-like-a-git.net/). Eu acho o Git mais importante que o GitHub, embora os dois sejam importantes hoje em dia. E não tem nada a ver com aprender a programar (Git é uma **ferramenta** que vc usa para controle de versão, não é uma linguagem, dá pra aprender ambos em paralelo porque são coisas diferentes). > desculpa mas o que é o pull request? Imagine que vc copia o repositório de outra pessoa (`git clone`), faz alterações e no final manda de volta pro repositório dela. Esse "manda de volta" é um pull request: é um pedido do tipo "*olha que legal o que eu fiz, vc pode dar uma olhada, e caso tenha gostado, adicionar isso de forma definitiva no seu repositório?*" - isso é, imagino eu, para evitar que qualquer pessoa fique mudando qualquer coisa no seu repositório. A pessoa pode mudar na cópia dela, mas pra mudar a sua, tem que pedir antes - daí o "request" (pedido).
isso me despertou uma nova duvida, entendo que o git trabalha com as versões de um programa e voce meio que expoe isso com um determinado controle no github. mas isso tambem serve para ideias de um programa que não existe? por exemplo eu não sei programar ainda(isso é real na verdade) mas tenho ideias de um programa que sempre quis desenvolver eu posso colocar essa ideia no github para alguem desenvolver comigo ou para mim? como seu eu fosse um supervisor ou gerenciador do projeto que acompanha se o programador esta fazendo de forma correta? Sempre quis fazer algo assim para tirar algumas ideias da cabeça mas meu pensamento era em contratar um freelancer, mas existe essa possibilidade no github? ou eu tenho que gastar uma grana mesmo com isso e contratar alguem? porque se a ideia for boa e andar, ela pode gerar um dinheiro para mim e para quem desenvolver comigo, seria um meio de criar renda e tirar a ideia do papel investindo com trabalho. isso existe nessa comunidade? novamente peço desculpa se falei algo muito errado ou fora de contexto mas sou muito cru nisso, estou literalmente aprendendo enquanto escrevo. obrigado pelo ponto de vista, exclarecimentos e opnioes.
O github vai armazenar o código e o histórico de alterações feitas. A versão gratúita do Github vai deixar seu código aberto, o que significa que qualquer pessoa poderia ver o que está sendo construído, como seus algoritmos funcionam e tudo mais. É possível "gerenciar" um projeto por lá, onde o dev faz e você confere o que foi feito, mas é bom você saber no mínimo como por o projeto para rodar, já que, sendo você um iniciante, ler o código pode não deixar claro o que ele faz. De qualquer forma, se você não sabe programar, você vai atuar na base da confiança de que o projeto obecede a regra de negócio que você estipulou, e para isso, é super importante deixar bem claro como o projeto deve funcionar. Agora, eu acho pouco provável que você ache alguém que vai embarcar nessa contigo de graça. Todo programador experiente já teve que lidar com alguém que não entende nada de programação, mas que teve uma "ideia genial" de aplicativo. Realmente, se o projeto for um sucesso, o dev vai se dar bem. Mas e se não for? O cara vai investir horas de trabalho em troca de nada? Não é impossível, mas acho que seja algo bem difícil. Boa sorte com isso.
Entendo seu ponto. Voce acha que todos que estão ali de uma certa forma tem projetos proprios ali ou a maioria? Porque to pensando, se eu vou expor meu projeto ou meu codigo, vai depender da sorte alguem querer me ajudar se eu não tiver uma equipe? A função então do github so seria valida para equipes de trabalho ja preexistentes? Pensava em um conceito mais wikipedia, mas como te disse não sei nada disso ta, to aprendendo como funciona com o que voces estão me respondendo. Por exemplo exemplo, é um hobby pessoas procurarem codigos para dar opnião ou fazer uma edição ou isso é 100% comercial?
Como eu disse, um código aberto no github pode ser acessado por qualquer pessoa, e assim, qualquer um pode fazer alterações no seu código e solicitar um 'pull request' (que basicamente significa que o usuário está mexendo no seu código e você avalia se aceita ou não as alterações no projeto principal). Não diria que "depende da sorte" para alguém resolver engajar no seu projeto, mas as pessoas precisam saber que ele existe. Se o seu perfil no github tem alguma influência ("fama", digamos assim), é mais provável que mais programadores vejam e, assim, mais provável que alguém se interesse em contribuir. Mas isso também vem do fato do produto final ser grátis, algo que contribui com a comunidade sem fins lucrativos. Se você ver os maiores repositórios do github, vai ver que todos ajudam a comunidade de alguma forma (muitos são a fins educacionais), mas não tem ninguém ganhando dinheiro com isso. Se o seu projeto tiver fim lucrativo, é pouquíssimo provável que alguém queira ajudar de graça, e é inclusive arriscado mantê-lo aberto, é como dar a chave do cofre pro ladrão. O Tabnews por exemplo, é código aberto no github, muita gente aqui ajuda de N formas na melhoria do código, mas como vemos, não tem ninguém ganhando dinheiro aqui, e não há nenhum tipo de dado mais "sensível" que valeria ser "roubado" por alguém.
Legal, entendi bem esse ponto. Então quando falamos de git em codigo aberto é mais voltado para collab mesmo ne. Essa popularidade ou fama ou influencia vai ser realmente mais dificil ne, entendo que pessoas vão querer ajudar em projetos famosos com um objetivo de ajuda mas tambem com um objetivo de ter isso como uma divulgação do tipo "ajudei no projeto X sobre a questão Y", tipo como uma experiencia de curriculo, é isso?
Como peso de currículo, particularmente acho indiferente a fama do projeto, mas sim como você contribuiu. Não adianta você por no currículo que contribuiu num repositório super famoso e, quando vamos ver, tu só alterou a cor de um botão. Vale mais ter um projeto seu (mesmo sem fama alguma), mas onde você fez realmente coisas mais complexas e usou suas habilidades como desenvolvedor. As pessoas ajudam independente de fama, o que eu quis dizer é que as pessoas precisam saber que o projeto existe, não é? Como eu iria ajudar no seu projeto, por exemplo, se eu nunca ouvi falar disso? Mas claro, além disso, é preciso que a ideia do seu projeto me motive de alguma forma em contribuir, e que seja numa linguagem que eu conheça. Logo, você precisaria ter algo que gerasse interesse da comunidade, e de preferência utilizando uma linguagem popular, para aumentar o número de devs capazes de contribuir de alguma forma.
entendi, so não entendi como eu vou fazer as pessoas verem meu projeto. não sou bom com essa parte, mas assim que eu começar a desenvolver vou atras disso, realmente não é um projeto comercial e sim um projeto que tem um metodo e um objetivo. vou tentar desenvolver ele no curso que estou fazendo mas sinto que vou precisar desse tipo de ajuda. sobre essa atividade ser um hobby das pessoas da area, voce conhece alguem assim que gosta de caçar codigos para tentar colaborar? isso é uma pratica entre programadores?
Para as pessoas verem o seu projeto você precisa divulgar. Primeiro saia do zero (todo mundo tem um sonho, isso é lindo, mas não dá pra ajudar. Começa fazendo alguma coisa, depois pede ajuda, fica mais fácil assim). Dai tu posta aqui, posta no linkedin, posta em outras redes sociais que Devs acessam, faz um canal no youtube e divulga lá.. é divulgação, as pessoas precisam saber que isso existe. Quanto a ser um "hobby", eu não sei onde vc viu isso, mas não vejo que é bem assim. As pessoas ajudam pelo prazer de ajudar, de fazer parte, do pertencer a uma comunidade com um propósito. Por isso falei antes que o seu projeto precisa mexer com os devs, para que haja a motivação de contribuir. Mas sim, atingindo o interesse, as pessoas vão clonar seu repositório, olhar o código, testar uma ou outra alteração, e vão aos poucos contribuindo. É preciso estar claro o objetivo do seu projeto, pois não estamos em posição de exigir nada, então o dev deve enxergar por conta própria uma possiblidade de melhoria.