[英]How to pull from git repository while replacing current files AND ignoring non-conflicting files
我的ubuntu服务器上有一个网站。 我通常在笔记本电脑上编写代码,然后使用scp复制代码。 我决定可以将其推送到笔记本电脑上的git存储库,然后将其拉到服务器上。 我在两台机器上的git仓库都在/ var / www / html中(由apache2提供)。
问题:
在我的服务器上,我有一个从/ home / files到/ var / www / html / files的符号链接。 我还有一个文件/var/www/html/images/image.png。 该文件和符号链接在我的笔记本电脑上不存在,因此当我从笔记本电脑执行git push时,它们不会添加到存储库中。
我想要:
在我的服务器上执行git pull并让其将所有当前的所有网页(例如/var/www/html/home.php)替换为存储库中的新版本,而不会更改该文件中不存在的本地文件储存库,例如/ var / www / html / files / *和/var/www/html/images/image.png
当我在服务器上执行git pull时,git似乎替换了/var/www/html/images/image.png(/ var / www / html / images)的父目录,因此我找不到/ var / www / html等/ image.png
了。
我所做的(在笔记本电脑上):
$ nano /var/www/html/home.php (update the webpage)
$ git push
我所做的(在服务器上):
$ ln -s /home/files /var/www/html/files
$ cp /home/some/random/image.png /var/www/html/images/image.png
$ git pull
我期望:找到/var/www/html/home.php的新版本,并仍然找到旧的/var/www/html/images/image.png
相反:我找到了/var/www/html/home.php的新版本,但没有找到/var/www/html/images/image.png
由于Calum Halpin指出了这个答案 ,您可以轻松地在包含images/image.png
存储库根目录中创建一个名为.gitignore
的文件。 这样,git不会跟踪图像,也不会在服务器上将其删除。
您还可以编写一个脚本,该脚本自动提取并创建符号链接。
我发现了这一点:我必须将要保持不变的文件(即images / image.png)添加到gitignore文件中,然后我执行git fetch --all
然后git reset --hard origin/master
。 这会将当前目录中的所有文件更新(并覆盖)到远程存储库中的新状态(是的,这将覆盖您所做的任何新更改,因此,如果您不想丢失工作,请记住使用git stash
)。 同时, .gitignore
文件中的所有文件都将保持不变:-)。 我写了一个小脚本: git fetch --all && git reset --hard origin/master
。
来源:这里的第一个答案: 如何强制“ git pull”覆盖本地文件?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.