Mac如何用终端将本地项目上传到自己的github

前提条件

a. 拥有一个GitHub账号
b. 将本地SSH key添加在GitHub账号的SSH keys里面

操作步骤

首先要安装一个git(我们先安装homebrew,然后使用homebrew来安装git)

  1. 安装git
brew install git
  1. 设置username和email(github每次commit都会记录他们)
git config --global user.name "用户名"
git config --global user.email "当初注册的邮箱"
  1. 通过终端命令创建ssh key
ssh-keygen -t rsa -C "123123123.qq.com(邮箱)"

然后他会让你输一些密码和配置,我们一路回车都用默认

  1. 执行了上面的操作后会在根目录下产生一个.ssh的文件,这个文件中中有一对秘钥,为公钥(id_rsa.pub)与私钥(id_rsa),其中的公钥(id_rsa.pub)就是我们想要的


    image.png

在根目录下

cd .ssh
cat id_rsa.pub

这时会将密钥的东西显示在屏幕上
将产生的东西全部复制

image.png
  1. 点击New SSH key,如图


    image.png

添加key,如图


image.png
  1. 然后在终端验证
ssh -T [email protected] 

当打印出Hi XXX! You've successfully authenticated! 就代表大功告成了!

然后在github中直接在主页点击new就可以创建一个仓库


image.png
  1. 然后点击create repository就可以创建仓库


    image.png
  2. 然后就需要将本地的项目上传到github首先

cd 项目根目录下

然后执行如下代码

git init
git add .
git commit -m "这里的内容是对提交项目的描述"

关联到需要将项目传输的仓库将ssh后面的地址复制下来


image.png
  1. 执行命令
git remote add origin 刚才你复制的SSH链接
  1. 上传github之前,要先pull一下
git pull origin master
  1. 然后直接执行
git push -u origin master

如果没有成功可以强制提交

git push -f origin master

强制push就成功了。
这样就可以直接将项目上传到仓库当中了


  • 删除远程仓库的文件夹demo
git rm --cached -r demo
git commit -m "remove directory from remote repository"
git push
  • 清除本地git缓存
git rm -r --cached .
  • 删除掉 UserInterfaceState.xcuserstate文件所在文件夹的索引
git rm -rf --cached 要删除的目录(本地文件不删除,只删除本地仓库的索引)
  • git rm --cachedgit rm 的区别
git rm --cached 和删除本地文件,只删除本地仓库索引
git rm 删除本地文件,而且删除本地仓库索引

pull 冲突时,可以先将当前的内容存储起来

git stash

然后再pull代码,完事后在pop恢复回来

git pull origin master
git stash pop

git stash list 可以查看临时存储栈内的列表


如果你想完全地覆盖本地的代码,只保留服务器端代码,则直接回退到上一个版本,再进行pull:

git reset --hard 
git pull origin master

还原单个文件

  • 第一步: 在命令行中输入 git log 文件路径 得到该文件的commit历史。

  • 第二步: 复制需要回退版本的hash,在此假设我们回退到 d98a0f565804ba639ba46d6e4295d4f787ff2949 ,则复制该序列即可

  • 第三步:checkout 对应版本。格式为 git checkout , 在此即为命令行中输入 git checkout d98a0f565804ba639ba46d6e4295d4f787ff2949 文件路径

  • 第四步: commit checkout下来的版本。 如: git commit -m "revert to previous version"

  • 最后 :git push origin master到服务器

Mac上的.DS_Store文件

.DS_Store 文件,是用于存放目录自定义属性(如图表、位置属性)等元数据信息的系统文件,由 Finder 自动创建。虽然所有 . 开头的文件/文件夹默认隐藏(可以使用 Command + Shift + .显示所有隐藏文件),平时我们看不见,也不影响使用,但是 Git 仍会将其记录下来,即便我只是在同目录下移动文件。多人协作时,Git会发生.DS_Store冲突,这个比较难搞,而且极可能泄露一些信息,综合起来最好的处理办法是代码仓库不要有这样的文件。

  • 方法 1:项目目录设置.gitignore

不论是git/svn,对于无关的文件包括项目编译过程中的中间文件,我们都选择忽略处理,这样就不会提交到仓库了。
仅针对git的处理就是设置.gitignore文件。

.gitignore配置规则(正则表达式)

  1. 所有空行或者以注释符号 # 开头的行都会被 Git 忽略;
  2. 星号(*)匹配零个或多个任意字符;
  3. [abc] 匹配任何一个列在方括号中的字符;
  4. 问号(?)只匹配一个任意字符;
  5. [a-z] 匹配所有在这两个字符范围内的字符;
  6. 匹配模式最后跟反斜杠(/)说明要忽略的是目录,例如:xxx/
  7. 匹配模式以反斜杠(/)开头说明防止递归
    第一个 / 会匹配路径的根目录,例如,”/*.html”会匹配”index.html”,而不是”d/index.html”。
  8. 要忽略指定模式以外的文件或目录,可以在模式前加上叹号(!)取反。

特别说明:

  • 通配符 * 匹配任意个任意字符,? 匹配一个任意字符。需要注意的是通配符不会匹配文件路径中的 /,例如,”d/*.html”会匹配”d/index.html”,但不会匹配”d/a/b/c/index.html”。
  • 两个连续的星号** 特殊含义:
    1. 以 **/开头表示匹配所有的文件夹,例如 **/test.md 匹配所有的test.md文件。
    2. 以 /** 结尾表示匹配文件夹内所有内容,例如 a/** 匹配文件夹a中所有内容。
    3. 连续星号** 前后分别被 / 夹住表示匹配0或者多层文件夹,例如 a/**/b 匹配到 a/b 、a/x/b 、a/x/y/b 等。
  • 前缀 ! 的模式表示如果前面匹配到被忽略,则重新添加回来。如果匹配到的父文件夹还是忽略状态,该文件还是保持忽略状态。如果路径名第一个字符为 ! ,则需要在前面增加 \ 进行转义。

忽略文件.gitignore配置

忽略配置.DS_Store文件,在git工程文件夹中新建.gitignore文件,在文件中添加:

.DS_Store
**/.DS_Store
.DS_Store?

已经提交的内容,希望git能够忽略,但同时并不会删除本地文件,需要在控制台输入以下命令:

git rm -r --cached $file_path
  • 方法2:全局设置忽略

虽然每个项目配.gitignore文件可以成功,但是每个项目都需要配置就有点烦。我们可以在git的全局进行配置来忽略.DS_Store文件。

设置之前我们先看下现在的git config配置情况

git config --list

实际上git配置情况可以在 ~/.gitconfig 文件中查看。

vi ~/.gitconfig

通过 :q! 退出后,我们需要建立一个文件,把需要全局忽略的文件路径写入其中。该文件起名为.gitignore_global:

打开终端,在某一个位置创建 .gitignore_global 文件(建议在当前用户目录下):

touch ~/.gitignore_global

打开文件

vi ~/.gitignore_global

或者

open ~/.gitignore_global

修改该文件,填入与上方 .gitignore 示例一样的内容

.DS_Store
**/.DS_Store
.DS_Store?

然后对git进行全局设置,让git忽略.gitignore_global中的所有文件:

git config --global core.excludesfile ~/.gitignore_global

这样就不用每个git目录都设置忽略.DS_Store文件了!

此时终端输入:

git config --list

如果有下面这行:

core.excludesfile = /Users/[username]/.gitignore_global

就说明已经添加成功了,以后 Git 就不会再记录 .DS_Store 了。

批量移除仓库已有的 .DS_Store
即便后续不会再记录,仓库中的 .DS_Store 都还在,需要手动删除。

终端进入仓库目录,输入:

find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch

这样就删除了所有该仓库的 .DS_Store 。重新提交推送即可(git add . git commit git push)。

你可能感兴趣的:(Mac如何用终端将本地项目上传到自己的github)