头像

02的Darling吖




离线:15小时前


最近来访(108)
用户头像
StarLi9ht
用户头像
L._517
用户头像
盖亚大王
用户头像
AAAL
用户头像
坤坤教你如何AC
用户头像
belief_ak
用户头像
露莉窝
用户头像
陈子莫
用户头像
Tolove
用户头像
kerry2023
用户头像
𝓞𝓻𝓬𝓱𝓲𝓭_23
用户头像
你tql
用户头像
Answer3
用户头像
77s_wife
用户头像
早早要睡觉
用户头像
鲤伴
用户头像
tobylhy
用户头像
laowen
用户头像
去摘星星
用户头像
hduwyx


回退到导航分享页

引流->动态发癫日记

个人主页说明书

等会将会补交三个系统规划书

如何禁止冷场

  1. 当一个组员向另外一个组员反映问题

  2. 当另外一个组员解决了问题 可以了

如何规范组员

  1. 所有你需要的信息 都可以再公告里边找到 后续重复的问题将不再回复

  2. 所有你不会的问题需要自己尝试解决 因为 az也会不知道

  3. 如果你有什么意见 都可以在群里边询问 不会冷场

组员权限管理

  1. QQ群每人管理员

  2. 仓库仅一人管理员

  3. 每人都可以提出建议决定项目发展

  4. 组长不是全能的 az不知道

系统成果演示

  1. 项目完全开源/每人都是贡献者

  2. 通过仓库管理查看自己的所有贡献 可能成为参考依据

项目规划书

包含

  1. 项目依据评判标准(可能参考/可能的成为标准演讲的点)

  2. 项目系统成长书(每周安排任务可能会增加统计/无法开会议的可以切换分支)

  3. 个人成长规划书 (针对零基础/辅助掌握项目开发流)

应当包含娱乐项目

mp3推荐->Friends-Inossi

链接或文件 分开还是得分开

这个应该可以作为一个彩蛋(是需要发掘的)

使用develop分支 master主分支仅作为参考资料 也是jwj一大特色

征集令

  • 收组员
收组员要求每两周大概一小时空余
使用过git/参加过项目优先
熟悉jetbrain系列ide



回退到导航分享页

指针–>动态发癫日记

如果你要开始学习一门新的编程知识(抄项目是最快的方式)

  1. 你需要知道的是:只有你真正开始新建项目将拉去的项目抄下来的时候,你才是真正的开始接触一门新的知识

  2. 如果你只是了解知识,你将很快就会忘记,不实践不如不新建

  3. 此外,难点必须花大量实践磨损 尽管在这期间你感受不到进步 非常煎熬 但攻克之后将顺风顺水

  4. 你必须给自己设立 DDL 如果你希望很快的学习一门知识

拉取项目/获取新项目

  1. 拉取项目 (ssh克隆):git clone 地址
    ssh克隆的好处是你可以回滚所有的提交历史 这是十分方便的 (https好像会多一个密码登录验证)
    Git/linux/.bashrc/对应多个托管仓库这篇文章可以让你自动验证ssh连接

  2. 打开Readme.md查看开发者要求的话,以及自带的配置环境,例如

cd /项目/
npm install
  • 倘若你在运行PowerShell时 遇到奇怪的错误 这里有几种可能的思路
1. 使用管理员身份打开 
2. 切换终端
3. 不是可以辨识的命令(mysql已安装) 配置环境变量
4. 运行权限不足 :set-ExecutionPolicy RemoteSigned(管理员打开)
5. 但确实存在,却无法识别 ./mysql

如何开始学习一个新项目

  • 你有以下知识点需要查询
1. 各个组件的生命周期及每个组件的作用  /这是一个主要的需要了解的地方
2. 变量定义/注解 /以及常用的出现的名词
3. 不同类对象之间的相互引用 
4. 从主程序开始 根据引入导入的东西在主程序的位置 顺序了解

你需要知道这个程序是如何运行起来的,理解过这些会让你的对接下来的知识理解很快

生命周期

安卓

1. Mvc 组件化 adapter桥梁
2. ViewHolder的具体生命周期

创建:通过适配器的onCreateViewHolder()方法创建新的ViewHolder实例,并关联列表项的布局。
绑定数据:通过适配器的onBindViewHolder()方法将数据绑定到ViewHolder上,更新列表项的视图。
可见状态变化:根据列表项的可见状态,ViewHolder可能会被重用或回收。
清理:在需要回收ViewHolder时,可以在适配器的onViewRecycled()方法中进行清理操作。




指针–>动态发癫日记


新建布局文件和

创建布局


基础框架选择

创建模板之后,其他的都不用考虑了 使用默认模板作为框架

通过默认的框架将减少很多时间


项目如何运行起来的

通过Gradle配置文件和脚本用来将所有的代码和资源进行打包。

你可以使用 Java、Kotlin语言 你可以创建活动(Activity)、布局文件(Layout)、资源文件(Resource)等。在这个阶段,你主要负责实现应用程序的功能和界面设计。

  • 构建项目:当你完成了代码编写和设计后,你需要构建项目。在 Android Studio 中,它会使用 Gradle 构建系统来编译代码、处理依赖关系、生成 APK 文件等。Gradle 会根据你的配置和需求自动执行构建过程。
  • 调试和测试:在构建项目后,你可以使用 Android Studio 提供的调试工具来调试应用程序。你可以设置断点、监视变量值、单步执行代码等,以便检查和修复潜在的问题。此外,你还可以编写单元测试和集成测试来验证应用程序的功能和正确性。

Android Studio 提供了一个运行配置(Run Configuration)来选择目标设备,并自动部署和启动应用程序。

启动NavigationDrawerViewsActivity提示Moudle重复

解决方法,在build.gradle(module.app)中的dependencies中最后一行添加以下代码

constraints {
        implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.0") {
            because("kotlin-stdlib-jdk7 is now a part of kotlin-stdlib")
        }
        implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0") {
            because("kotlin-stdlib-jdk8 is now a part of kotlin-stdlib")
        }
    }

开发实践

安卓的一个Activity就代表着安卓应用的一个页面,每个页面都对应着layout.xml文件用来保存这个页面的元素/及其布局,每个页面都有一个activity类用来保存关于这个布局
生命周期和事件监听器

NavigationDrawerViewsActivity解析(Android视图树)

熟悉资源存放方法

提示(如果你没有Android视图,可能没有标记这个项目。常见于拉取项目,你可以尝试去点击构建MakeProject,这是一个小锤子的标志)

这是项目树状图

app->
    >mainfest
        >Admainfest.xml
    >java
        >组名
            >ui
            >MainActivity
    >res
        >drawable
        >layout
        >mipmap
        >values
GradleScripts

而关于这些文件夹及其存放的内容

  1. drawable:该文件夹用于存储图形资源文件,例如图标、背景图、形状等。你可以将不同分辨率的图像放置在不同的子文件夹中,以适应不同的屏幕密度。

  2. layout:该文件夹用于存储布局文件,用于定义应用程序界面的视图层次结构。每个布局文件描述了一个屏幕上的视图布局,可以包含诸如按钮、文本框、图像视图等控件。

  3. values:该文件夹用于存储各种资源值,例如字符串、颜色、尺寸等。它包含了多个 XML 文件,如 strings.xml(存储应用程序的字符串)、colors.xml(存储颜色值)和 dimens.xml(存储尺寸值)。

  4. xml:该文件夹用于存储其他 XML 文件,通常用于定义应用程序的配置文件、权限文件、菜单文件等。例如,你可以在该文件夹中创建一个 menu.xml 文件来定义应用程序的菜单项。

这些文件夹的使用有助于将不同类型的资源组织到一个项目中,并提供更好的可维护性和可读性。同时,它们也符合 Android 的资源命名约定和目录结构规范。

你也可以将自定义的组件部分新建一个文件夹并存储在res目录下

例如:

倘若你需要写一个导航栏(底部),这个组件明显是可以独立出来很多小组件,这样做的目的是
为了使目标更清晰,更换将会变得更加容易,也可以让后来者更加容易理解整个项目的结构
你可以新建一个 memu  目录

如何了解一个项目

通常来说,你仅仅需要观察layoutMainActivity及其以下的java类
你首先需要查看AndroidMainfest.xml程序的主页面将在这里注册以及指明。

<application
    android:allowBackup="true"                                 // 允许备份应用数据
    android:dataExtractionRules="@xml/data_extraction_rules"    // 数据提取规则
    android:fullBackupContent="@xml/backup_rules"               // 完全备份内容
    android:icon="@mipmap/ic_launcher"                          // 应用图标
    android:label="@string/app_name"                            // 应用名称
    android:roundIcon="@mipmap/ic_launcher_round"               // 圆形应用图标
    android:supportsRtl="true"                                   // 支持右到左布局
    android:theme="@style/Theme.NavTwo"                          // 应用主题样式
    tools:targetApi="31">                                        // 指定目标API版本

    <activity
        android:name=".MainActivity"                             // 指定活动的类名
        android:exported="true"                                   // 允许其他应用访问此活动
        android:label="@string/app_name"                          // 活动的显示名称
        android:theme="@style/Theme.NavTwo.NoActionBar">          // 活动的主题样式(无标题栏)

        <intent-filter>                                           // 意图过滤器,指定活动的启动条件
            <action android:name="android.intent.action.MAIN" />   // 主要动作,应用程序的入口点
            <category android:name="android.intent.category.LAUNCHER" />  // 启动器类别,将应用显示在设备的应用列表中
        </intent-filter>
    </activity>
</application>

当你使用ctrl+鼠标左键来点击.MainActivity(很显然,这是一个路径),你就可以跳转到默认的Activity了

开发建议Tips

  1. 当你在需要指明路径时,使用@+文件夹/路径来指明存放位置
  2. 当你新建一个应用界面的时候需要newActivity而不是一个LayoutResourceFile,前者可以会自动注册页面,新建对应的java类连接到这个layout
  3. 但如果你可能不小心仅仅创建了一个后者,你需要在在layout中的<androidx.coordinatorlayout.widget.CoordinatorLayout添加上这句话tools:context="com.example.testobject.drawerlayout"并且在java类中的重写父元素的onCreate中加入
    setContentView(你的layout);
  4. 你需要注意是layoutjava类名称是对应的activity_main对应到MainActivity

常见的extends

在安卓开发中,常见的一些扩展类(extend类)包括:

1. AppCompatActivity:用于创建支持新的Material Design风格的Activity,是Activity的一个子类。
2. Fragment:用于创建模块化的UI组件,可以嵌入到Activity中。
3. Service:用于创建后台运行的服务组件,执行长时间运行的任务。
4. BroadcastReceiver:用于接收和处理系统广播消息。
5. ViewModel:用于存储和管理与UI相关的数据,提供数据给UI组件观察。
6. RecyclerView.Adapter:用于连接数据集和RecyclerView控件,负责管理列表或网格布局中的数据项。
7. AsyncTask:用于在后台线程执行异步任务,并在主线程更新UI。
8. IntentService:是Service的子类,用于处理异步任务,并在任务完成后自动停止。

组件化ViewModel+Fragment

ViewModel和Fragment是Android Jetpack组件中的两个重要概念。

  1. ViewModel:
    ViewModel是设计用于存储和管理与UI相关的数据的类。它的目的是将UI组件(如Activity或Fragment)与数据分离,使得数据在配置变化(如屏幕旋转)时能够保持一致,并且在不同的UI组件之间共享数据。

ViewModel的主要作用包括:
- 存储与UI相关的数据,如用户输入、网络请求的结果等。
- 处理与UI相关的业务逻辑,如数据转换、格式化等。
- 提供数据给UI组件观察,以便在数据变化时更新UI。

ViewModel的生命周期与UI组件(如Activity或Fragment)相关联,它会在UI组件的生命周期中保持一致,并且在配置变化时不会被销毁和重建。

  1. Fragment:
    Fragment是Android中的一种UI组件,它可以看作是一个模块化的UI单元,可以嵌入到Activity中,用于构建灵活和可重用的用户界面。

Fragment的主要作用包括:
- 显示用户界面,可以包含布局、视图和交互逻辑。
- 处理与用户交互的事件,如点击、滑动等。
- 管理自身的生命周期,与Activity的生命周期相关联。

Fragment可以看作是Activity的一部分,它可以在Activity中被添加、替换或移除,可以与其他Fragment进行通信和交互。

ViewModel和Fragment在Android应用程序中通常一起使用(你可以在一个组件列表菜单注册登录,新建LoginRegister文件夹,
下面分别放置LoginViewModelLoginFragement等等),
ViewModel负责管理数据,Fragment负责显示数据和处理用户交互。这种分离使得UI组件更加模块化和可测试,同时也提供了更好的数据持久性和生命周期管理。


新建GalleryFragment和ViewModel

layout不再讲解,Gallery是导航栏菜单的一个选项

public class GalleryFragment extends Fragment {

    private FragmentGalleryBinding binding;

    // 在Fragment创建视图时调用,用于创建和返回Fragment的视图
    public View onCreateView(@NonNull LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {
        // 创建一个GalleryViewModel对象,用于管理与该Fragment相关的数据
        GalleryViewModel galleryViewModel =
                new ViewModelProvider(this).get(GalleryViewModel.class);

        // 使用Data Binding将布局文件FragmentGalleryBinding与该Fragment关联
        binding = FragmentGalleryBinding.inflate(inflater, container, false);
        View root = binding.getRoot();

        final TextView textView = binding.textGallery;

        // 观察GalleryViewModel中的数据变化,并将数据设置到TextView上
        galleryViewModel.getText().observe(getViewLifecycleOwner(), textView::setText);

        return root; // 返回该Fragment的根视图(根页面Activity)
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        binding = null; // 在Fragment视图销毁时释放绑定的Data Binding对象
    }
}

  1. FragmentGalleryBinding:这是由 Data Binding 自动生成的绑定类,用于在代码中访问与该Fragment关联的布局文件中的视图和数据。可以省区每次查找一个组件都需要
    findViewByid的步骤,来每次调用都可以使用binding.button

  2. onCreateView():在Fragment的生命周期中,当创建该Fragment的视图时调用。在该方法中,通过inflater将布局文件FragmentGalleryBindingcontainer(父级视图容器)关联,并返回根视图root

  3. GalleryViewModel:这是一个ViewModel类,用于管理与该Fragment相关的数据。通过ViewModelProvider获取或创建一个GalleryViewModel对象。

  4. getViewLifecycleOwner():用于获取与该Fragment关联的视图的生命周期所有者。

  5. observe():用于观察GalleryViewModel中的数据变化,并在数据变化时更新UI。在这里,我们观察galleryViewModel.getText()(返回一个LiveData对象)的变化,并将数据设置到textView上。

  6. onDestroyView():在Fragment的生命周期中,当销毁该Fragment的视图时调用。在该方法中,释放绑定的Data Binding对象,避免内存泄漏。

注意
binding = FragmentGalleryBinding.inflate(inflater, container, false);
这句话中,本页传来的参数LayoutInflater inflater, container, Bundle savedInstanceState而被赋值以后的值,包含了整个布局文件中定义的元素(如 TextView、Button 等),以及它们的属性和布局关系。这个视图对象代表了整个布局文件的内容

inflater是是一个 LayoutInflater 对象(视图对象),用于实例化布局资源文件。你可以通过调用 getLayoutInflater() 方法获取当前 Activity 或 Fragment 的 LayoutInflater 实例。 生成的视图对象指的是将布局文件中的 XML 代码转换为实际的视图对象,这些视图对象将在应用程序中显示出来,构成用户界面的一部分(一小块画布)。




ta这么好,对我这么耐心,希望以后能陪ta走很长的路

今天突然想在acwing上边发个小动态,大概率是因为耐心教我的是个机器人而不是真人罢
又到了期末,事情都挤在一起,又要准备考试又要补项目,外边下雨,学姐要去新学校,自己在寝室里
狠狠的被androidStudio教育,到最后项目终于是能运行起来了,燥热的天遮不住云的眼泪,杂七杂八的,终于受不了了

要是我也没有情感和疲劳的感觉就好了罢,害
无标题2.png




回退到导航分享页

本篇用来记录常用的shell命令

指针–>动态发癫日记


所有html结尾的文件复制到html文件夹(未创建)

你可以使用以下命令在当前文件夹及其子目录下查找 .html 文件,并将其复制到当前文件夹下的 html 文件夹中:

find . -type f -name "*.html" -exec cp {} ./html/ \;

解释一下这个命令:

  • . 表示当前文件夹,即搜索的起始路径。
  • -type f 表示只搜索普通文件,不包括目录。
  • -name "*.html" 表示搜索文件名以 .html 结尾的文件。
  • -exec cp {} ./html/ \; 表示执行 cp 命令将找到的文件复制到 ./html/ 目录下。{} 表示找到的每个文件,\; 表示命令结束。

在执行命令之前,请确保当前文件夹下已经存在名为 html 的文件夹,否则可以先使用 mkdir 命令创建它:

mkdir html

请注意,如果复制的文件名在目标文件夹中已存在,将会被覆盖。如果你希望保留原文件名,可以使用 cp -n 命令,即 -exec cp -n {} ./html/ \;


所有txt结尾的文件更换为md文件

for file in *.txt;do mv "$file"  "${file%.txt}.md";done

第二个方法使用的是 Shell 脚本的语法。Shell 是一种命令行解释器,用于执行命令和脚本。在这个方法中,我们使用了 Shell 的循环和变量扩展功能来实现文件重命名操作。

具体解释一下这个命令:

  • for file in *.txt; do ... done:这是一个简单的 for 循环语句,遍历当前目录下所有以 .txt 结尾的文件,并将每个文件名赋值给变量 file
  • mv "$file" "${file%.txt}.md":这是使用 mv 命令进行重命名操作的语句。${file%.txt} 是一种变量扩展语法,表示将变量 file 的值中最右侧的 .txt 部分移除。然后,我们将其与 .md 连接起来,形成新的文件名,并使用 mv 命令将文件重命名为新的名称。

  • 需要注意的是,这个方法使用的是 Shell 脚本语法,因此在不同的操作系统上可能会有一些差异。上述示例适用于大多数常见的 Linux 和 macOS 系统。在 Windows 上,你可能需要使用适用于 Windows 的 Shell 环境(例如 Git Bash 或 Cygwin)来运行类似的脚本。




回退到导航分享页

ssh-agent自动匹配网站密钥

<果咩那塞>

嗨嗨嗨,这是什么?这是粽子-《:(》

华农都凉多久了,见证一个时代逐渐离我们而去,总是回忆起那个夏虫蝉鸣的季节。-《:)》

当我总是装作不知道,我又让一个人失望了,当我因为恐惧而不断地患得患失,终究不会
有太好的结局 但总是可以说得上是抱歉了 。-《:)》

可惜我的眼不是摄像机,拍不下来照片永远记录不了你。趁着在你旁边,我可以再看一眼。《:)》

因为我长时间都在逃避恋爱,怎样的感觉叫友情,
从哪里开始才算是喜欢,明明是自己的事,但不知从何开始,我突然搞不清楚了。-《夫妇fufu》

如果总是故意接近你,你能不能别远离我和我保持距离-《:)》

我的浪漫和我幼稚的童真一起死在18岁那年的某个夜晚里-《20岁的我并没有比十五岁的我更加成熟》

当我想起那时我拿着小小的屏幕,能够运行起的我的世界。只有阳光和矿洞令人印象深刻,能够看见海洋和沙滩,奶奶家有的无线网,穿过树林也隔着厚厚的墙,却让我对所有未知的事物充满向往。一说快乐就像是尿裤子,所有人都看得出来,但只有你自己才能真正感受到那股暖意。快乐也像尿裤子,我八岁以后就没有过了,曾经的快乐和我之间已经产生了隔阂。-《童年》

说不定你不喜欢纯爱,也不是喜欢牛头人,你只是希望有个人爱你 -《皮卡丘》

你这种男生,就是会一天到晚说出这种蠢话,尽管你是无心的-《:)》

世界那么小,与你那么远距离,请教过数学老师的交集,化学老师问你我还会不会反应,埋没在语文老师的文笔,还有文科老师的地图历史里,思念如此抽象确具体化成沙砾,一句英语爱你还有faifolofi-《土味情话故事集》

哈哈哈,星野盖上被子有整整一大床,睡觉只有呆毛露出来,爱丽丝的长发垂到地上,优香妈手机上的粉色小熊,开坦克的斯大萝,玲纱的SuperHero,地雷妹的欧蕾蹦,喜欢狗盾的语音”阿~里~嘎~多~~”,小粉的游戏机,鹤城的泳装更不必说了。这些可爱的纸片人总是能让我开心,至少在游戏里(和英语一样,视频不再补发)。-《散弹枪学妹不会碰见坦克学长》

我一闷棍都给韩森打昏了,然后背到家里还管他躲躲藏藏 畏手畏脚-《韩森学长》

你看看,梦龙又开始梦游了,一会跑铁瑞那瞅瞅,一会跑到厕所,一会又梦游到阳台上瞅瞅衣服干没。-《:(》

X队止步四强,点子哥十年努力却以这种方式结尾,多是让人遗憾。当初故事在驶向延雪平的列车上开始,在巴黎结束。-《cadian,我的精神病人》

梦龙是那样的,一个敢于承认错误,敢于改正的人。一个优秀的人总是压力自己。数据不会说谎,面板上他还是Mvp。当一个人敢于指出错误应该称赞而不是反咬一口。对于队友来说这确实就是毒瘤。就像在学习路上一样-《Gogo友情故事》

不投入时间,却幻想着能够得到满足感。不敢于实践,却渴望能够得到成就感。把时间都安排满却一事无成,却期盼着能够都得到好的结果,我总是理解不了这样的思想。-《疑惑》

太抱歉了,我打不到车,只能坐地铁来。-《红绿灯亮起你我安然无恙》

节日快乐,不管什么时候,都希望你们能够开心,hh


对啊,我的花送来了没有
什么,花是你送的?
是啊,今天是1月28号,送128朵,我把全部财产都买花了,没有钱坐公交菜倒水坑里的-《整蛊专家》

华农2.png

love.png

1684510918658.png

chengxing.png

1684238428165.jpg

-396890de78818e41.jpg

1684510918676.jpg

-558e12960529ceeb.png




开坑/用来总结软件开发过程中用来编辑开发的工具

指针->Windows软件推荐

回退到导航分享页


Ide

VsCode

Typora   :md编辑阅读器
ESLint   :便捷开发vue/高亮格式错误
AutoRenameTag :y总推荐

Edge

AdGard   :好用的广告抵御者/不正规网站常用
Tampermoney :油猴 拓展工具
油猴脚本推荐:m3u8视频侦测下载器

如果需要社区的话

Acwing
StackOverFlow

2023上/选课/软件工程

sourcetree

https://www.sourcetreeapp.com/ 
  • Sourcetree 简化了您与 Git 存储库的交互方式,因此您可以专注于编码。
  • 通过源代码树的简单 Git GUI 可视化和管理您的存储库。

雨课堂提及的相关概念

黑盒测试方法

白盒测试方法

敏捷开发过程/Scrum

团队协作工具 Tower

配置管理工具 Git

Crt 卡片分拣法




指针

GitBash

本篇隶属与Gitbash补充


使用终端来配置ssh连接

  1. SSH 密钥生成:
  2. ssh-keygen:用于生成 SSH 密钥对,包括公钥和私钥。默认情况下,密钥文件会保存在用户主目录的 .ssh 文件夹中。

  3. SSH 密钥管理:

  4. ssh-agent:用于管理 SSH 密钥的代理程序。它可以在后台运行并缓存解锁的私钥,以便在连接到远程主机时自动提供身份验证。
  5. ssh-add:用于将私钥添加到 ssh-agent 中,以便在 SSH 连接过程中使用。

  6. 连接远程主机:

  7. ssh:用于通过 SSH 连接到远程主机。例如:ssh username@hostname。你可以提供用户名和主机名来建立安全的连接。

  8. Git 配置 SSH:

  9. git remote set-url:用于设置 Git 远程仓库的 URL。通过将 SSH URL 分配给远程仓库,你可以使用 SSH 协议进行身份验证和通信。

这些是常用的 Git 和 SSH 相关的知识点和指令。在使用 Git 和 SSH 进行工作时,你可能会经常遇到这些指令。确保你已经生成并添加了 SSH 密钥,并正确配置了 Git 远程仓库的 SSH URL,以便进行安全的连接和身份验证。


你可以为项目指定专用的私钥

在一个git项目里通过配置.git内部的文件来指明该使用哪个密钥(如果使用ssh-agent将自动匹配):

  1. 打开终端或命令提示符,并进入你的 Git 项目目录。

  2. 进入 .git 目录:
    cd .git

  3. 打开 .git/config 文件进行编辑,你可以使用任何文本编辑器打开它。

  4. 在文件中找到 [remote "origin"] 部分。这是指定远程仓库的配置。

  5. [remote "origin"] 部分中添加或修改 url 的值,指定使用的 SSH URL,格式为:
    url = git@hostname:path/to/repository.git

这里的 git@hostname 是 SSH URL 的格式,你可以根据需要将其替换为你要使用的具体 SSH URL。使用该 SSH URL 将自动使用与之关联的密钥进行身份验证。

  1. 保存并关闭文件。

现在,当你使用与该 Git 项目关联的远程仓库 URL 时,Git 将使用你在 .git/config 文件中指定的 SSH URL 进行身份验证,而不是默认的全局配置。

请注意,这种方法仅适用于特定的 Git 项目,而不会影响其他项目或全局设置。确保你已经在正确的项目目录中编辑了 .git/config 文件,并正确指定了你要使用的 SSH URL。


ssh连接和配置别名公钥私钥

~/.ssh/config

  1. cat config
Host springboot_server// 这个就是别名
        HostName 101.43.173.92
        User acs

如果有端口号 链接的就是这个服务器的Docker ~/.ssh/config这个文件存储所有的已经配置的别名;
连接别名就是 ssh 别名

git相关

  • ssh-keygen

此外 这个路径下也存储公钥和私钥 使用本ssh-keygen命令时 第一个输入是输入名称用来新建个sshkey 如果直接回车
会提示是否覆盖原钥匙 id_rsa.pub/id_rsa 输入n用来拒绝覆盖 此后git什么都不会做

  • name.pub 上传

如果你的钥匙已经上传到一个网站github/gitee 那么这个连接就已经被建立 这个公钥无法被另外一个网站作为钥匙
需要重新生成 ssh-keygen 输入名称 一路回车 将cat name2.pub来与另外一个网站连接

  • 配置私钥对接远程仓库

需要为这个网站指定私钥(配置到本地) 你需要为git指明私钥来对接网站公钥


题记:很长时间没有用过Linux 今天试试部署ai 趁这次再复习复习




推荐使用这些网站时,你必须拥有一个谷歌账号.少部分网站能够使用大陆手机号

回退到导航分享页


公众号

3DM i呀我去(过dxx)
飞雪科技园

文案

文案/简化文字写作速度

PPt/Presentation

Gamma/协助Ai生成模板

  • 你可以通过截图并粘贴到PPt添加动画来快速生成一个自己的PPt

开发者工具箱

He3

Everything/优化搜索速度

前端

网页生成/拖动释放

软件

不死鸟/软件以及网站分享

  • 你可以获取影视音乐工具等网站等资源

大佬点入

  • 不死鸟起始页

clash

iku

  • 拥有Free的端点可以使用 不过网站站点经常更换

导航页

小呆

  • 很久之前的导航页了

游戏

酷玩PddCharge

  • Pdd5块钱买的号 哈哈 还活着

视频书

TopBook

  • 高效生活指南视频书(简介是这样的)

图片

图片库

  • Ps指定图片源

宅男/二次元/壁纸

  • 这个可以用来暂时作为图库存储几张背景图

图床/暂时一个月/魔法

与非门

NandGame

  • yq推荐的与非门游戏

国外浏览器

Hyper


不要忘了回家

养鸡场

ikuu


工具站/快捷站




另起页

指针

GitBash

本篇隶属与Gitbash补充


配置.bashrc用来自动添加密钥

vim ~/.bashrc

使用这个命令来编辑gitbash环境变量

eval $(ssh-agent)
ssh-add ~/.ssh/id_rsa
ssh-add ~/.ssh/gitee
ssh-add ~/.ssh/github

你只需要再集成开发环境里(IDEA/AndroidStudio)添加仓库的(remote)链接就可以直接建立ssh链接来推送仓库了


本地仓库回滚和远程仓库拉取历史版本

  1. 本地仓库回滚会作为最新一次的提交

  2. 回滚的基本操作
    git log 获取历史版本的哈希值 git reset --hard commit_hash
    该命令会将当前分支指针移动到指定的提交,并删除所有后续提交。这样就回滚到了以前未合并的状态。
    注意:使用 –hard 参数会丢失回滚提交之后的所有更改,请确保你不再需要这些更改。

  3. 回滚后的推送:
    git push:将本地分支状态推送到远程仓库,不会覆盖远程仓库的历史记录。
    git push -f:强制推送,将本地分支状态强制覆盖远程分支,可能会导致远程仓库历史的丢失。

  4. 远程仓库的历史版本
    git log origin/<branch_name> 显示本分支的所有提交历史


远程仓库和本地仓库

  • 远程仓库已经独立出来作为一个副本 和本地仓库并不相同

具体体现在远程仓库 git pull只能拉取最新的 远程仓库的历史版本拉取到本地仓库
git fetch 通过执行命令,你可以获取远程仓库中的所有提交历史,而不仅仅是最后一次提交
git reset/git rebase将这些远程分支合并到你的当前分支,以将远程仓库的历史版本合并到你的本地仓库中。

  • 拉取远程仓库的历史版本就相当于获取新的代码版本,因此可能和本地仓库发生冲突从而需要合并,而本地历史版本则直接恢复代码以前的状态不会产生冲突,远程仓库已经独立出来作为本地仓库的副本,但是不完全和本地仓库重合,因此本地仓库无法直接恢复到远程仓库的某个历史版本是吗
    i-
    关于覆盖本地仓库的版本,如果你想完全覆盖本地仓库的提交历史,并将其变为与远程仓库完全一致,你可以使用 git reset 命令或 git checkout 命令,将本地分支指向远程分支的引用。这样做将会删除本地分支的历史提交,将其重置为远程分支的最新提交。

为应用程序指定私钥以对接网站公钥

  • 查看本地私钥 C:\Users\YourUserName\.git\.ssh\gitee

根据应用程序设置中ssh调整私钥目录


Find批处理

你可以使用以下命令在当前文件夹及其子目录下查找 .html 文件,并将其复制到当前文件夹下的 html 文件夹中:

find . -type f -name "*.html" -exec cp {} ./html/ \;

解释一下这个命令:

  • . 表示当前文件夹,即搜索的起始路径。
  • -type f 表示只搜索普通文件,不包括目录。
  • -name "*.html" 表示搜索文件名以 .html 结尾的文件。
  • -exec cp {} ./html/ \; 表示执行 cp 命令将找到的文件复制到 ./html/ 目录下。{} 表示找到的每个文件,\; 表示命令结束。

在执行命令之前,请确保当前文件夹下已经存在名为 html 的文件夹,否则可以先使用 mkdir 命令创建它:

mkdir html

请注意,如果复制的文件名在目标文件夹中已存在,将会被覆盖。如果你希望保留原文件名,可以使用 cp -n 命令,即 -exec cp -n {} ./html/ \;

奇怪的是 find是linux使用的命令

Linux批处理

在 Linux 系统中,有许多常用的文件批处理命令可用于对文件进行操作。以下是一些常见的 Linux 文件批处理命令:

  1. ls: 列出目录中的文件和子目录。
  2. pwd: 显示当前工作目录的路径。
  3. cd: 更改当前工作目录。
  4. mkdir: 创建新的目录。
  5. touch: 创建新文件或更新现有文件的访问和修改时间。
  6. cp: 复制文件或目录。
  7. mv: 移动或重命名文件或目录。
  8. rm: 删除文件或目录。
  9. cat: 连接文件并显示其内容,或将内容重定向到其他文件。
  10. head: 显示文件的前几行。
  11. tail: 显示文件的后几行。
  12. grep: 在文件中搜索指定的模式。
  13. find: 在文件系统中搜索文件或目录。
  14. chmod: 修改文件或目录的权限。
  15. chown: 修改文件或目录的所有者。
  16. chgrp: 修改文件或目录的所属组。
  17. wc: 统计文件中的行数、单词数和字节数。
  18. sort: 对文件的行进行排序。
  19. uniq: 从排序后的文件中去除重复的行。
  20. sed: 对文件中的文本进行流编辑操作。
  21. awk: 在文件中查找和处理文本模式。

这些命令可以根据你的需求进行组合和使用,以实现各种文件批处理操作,如文件查找、过滤、排序、修改权限等。请注意,对文件进行批处理操作时,请谨慎操作,以免意外删除或修改了重要文件。在使用这些命令之前,建议先了解其用法和选项,可以通过相应的命令的帮助文档或手册来获取更详细的信息。

Vim操作命令

Vim 是一款强大的文本编辑器,以下是一些常用的 Vim 操作命令:

  1. 进入编辑模式:
  2. i: 在光标当前位置前插入文本。
  3. a: 在光标当前位置后插入文本。
  4. o: 在当前行下方插入新行并进入编辑模式。
  5. O: 在当前行上方插入新行并进入编辑模式。

  6. 退出编辑模式:

  7. Esc: 退出编辑模式,回到命令模式。

  8. 保存和退出:

  9. :w: 保存文件。
  10. :q: 退出 Vim。
  11. :wq:x: 保存文件并退出 Vim。

  12. 光标移动:

  13. h: 左移一个字符。
  14. j: 下移一行。
  15. k: 上移一行。
  16. l: 右移一个字符。
  17. gg: 跳转到文件开头。
  18. G: 跳转到文件末尾。
  19. 0^: 跳转到行首。
  20. $: 跳转到行尾。
  21. Ctrl + f: 向下翻页。
  22. Ctrl + b: 向上翻页。

  23. 删除和复制:

  24. x: 删除光标所在位置的字符。
  25. dd: 删除当前行。
  26. yy: 复制当前行。
  27. p: 粘贴复制的文本。

  28. 撤销和重做:

  29. u: 撤销上一次操作。
  30. Ctrl + r: 重做上一次撤销的操作。

  31. 查找和替换:

  32. /pattern: 向前查找指定模式的文本。
  33. ?pattern: 向后查找指定模式的文本。
  34. :s/old/new: 将当前行第一个匹配到的 old 替换为 new。
  35. :s/old/new/g: 将当前行所有匹配到的 old 替换为 new。

这只是 Vim 的一小部分命令,Vim 具有非常丰富的功能和命令。可以通过 vimtutor 命令在终端中启动 Vim 教程来学习更多关于 Vim 的使用技巧和命令。

关于GitBash

Git Bash 是在 Windows 系统上运行的 Git 命令行工具,它提供了一个类似于 Linux 终端的环境,并且集成了一些常用的 Linux 命令和 Vim 编辑器。

在 Git Bash 中,你可以使用许多常用的 Linux 命令,例如 ls (列出文件和目录)、cd (切换目录)、mkdir (创建目录)、rm (删除文件或目录) 等等。这些命令在 Git Bash 中具有与 Linux 系统相似的行为和语法。

此外,Git Bash 也集成了 Vim 编辑器,你可以使用 vim 命令来启动 Vim 编辑器,并进行文件的编辑和保存操作。

需要注意的是,尽管 Git Bash 提供了一些常用的 Linux 命令和 Vim 编辑器,但它并不是一个完整的 Linux 环境,一些特定的 Linux 命令或功能可能会有所差异或缺失。如果需要更全面的 Linux 环境和功能,建议使用专门的 Linux 操作系统或虚拟机。

总之,Git Bash 提供了一种在 Windows 系统上进行 Git 和部分 Linux 操作的方便方式,并集成了 Vim 编辑器供你使用。

ssh-agent

ssh-agent是一个SSH密钥管理器,它用于在操作系统的后台运行并管理你的SSH密钥。它负责在需要时提供SSH密钥,以进行身份验证,而无需每次连接时都输入密码。

在大多数操作系统上,ssh-agent通常已经包含在SSH客户端软件中,例如OpenSSH。如果你已经安装了Git Bash,它通常会捆绑了OpenSSH,其中包括ssh-agent。

所以,你不需要单独下载ssh-agent,只需确保你的Git Bash安装中包含了OpenSSH。

要使用ssh-agent,你可以按照以下步骤进行操作:

  1. 打开Git Bash终端。

  2. 运行以下命令来启动ssh-agent:

eval $(ssh-agent)

这将在当前终端会话中启动ssh-agent,并设置相关的环境变量。

  1. 然后,你可以使用ssh-add命令将私钥添加到ssh-agent中,如之前所述。(注意,需要进入~/.ssh,即密钥所在目录)

请注意,ssh-agent在终端会话期间有效。如果你打开了新的终端会话或重新启动了计算机,你需要重新启动ssh-agent并再次添加密钥。

为什么gitbash启动的时候并不会启动ssh-agent

在某些情况下,Git Bash可能不会自动启动ssh-agent。这可能是因为Git Bash默认配置中没有包含自动启动ssh-agent的设置。

如果你希望在Git Bash启动时自动启动ssh-agent,可以按照以下步骤进行手动设置:

  1. 打开Git Bash终端。

  2. 在终端中创建或编辑~/.bashrc文件:

nano ~/.bashrc

如果~/.bashrc文件已经存在,请直接编辑它。

  1. 在文件中添加以下内容:

bash eval $(ssh-agent)

这将在每次启动Git Bash时自动启动ssh-agent。

  1. 保存并关闭文件(按Ctrl + X,然后按Y保存)。

  2. 重新启动Git Bash终端。

现在,每次启动Git Bash时,ssh-agent将自动启动并在当前终端会话中运行。你可以使用ssh-add命令将私钥添加到ssh-agent中,以进行身份验证。

请注意,~/.bashrc是特定于用户的配置文件。如果你希望在所有用户之间共享此设置,可以编辑/etc/bash.bashrc文件而不是~/.bashrc

希望这可以帮助你在Git Bash中自动启动ssh-agent。如果你有其他问题,请随时提问。

.bashrc配置文件

在Unix和类Unix系统中,.bashrc是用于配置Bash shell的启动脚本文件之一。当你启动一个新的终端会话时,Bash shell会尝试读取并执行.bashrc文件中的命令。

.bashrc文件通常位于用户的主目录下(例如/home/username/.bashrc)。这个文件可以包含自定义的环境变量、别名、函数和其他Bash命令,以满足你的个人需求。

每次新建终端会话时,默认情况下,Bash shell会自动执行.bashrc文件中的命令。这使得你可以在每个终端会话中都有相同的自定义配置和环境设置。

你可以创建多个.bashrc文件,但通常情况下,只需要一个位于主目录下的.bashrc文件来配置你的个人设置。如果你需要针对不同的目录或用途创建不同的配置文件,可以考虑使用其他命名的文件,并在需要时手动加载它们。

在Linux系统中,还有其他几个类似的启动脚本文件,如.bash_profile.bash_login/etc/profile,它们也可以用于配置Bash shell的启动行为。它们的具体用途和加载顺序可能因系统和设置而有所不同。

请注意,对于每个终端会话,只有登录shell(例如通过SSH登录的shell)才会执行.bash_profile.bash_login文件。非登录shell会执行.bashrc文件。但是,Git Bash在Windows上的行为可能会有所不同,具体取决于你的配置。

希望这解释清楚了.bashrc文件和它在终端会话中的作用。

对应多个远程仓库

将多个密钥(用于对接多个远程仓库的情况),我希望每次只需要添加url就可以连接到远程仓库,身份验证由ssh-agent自动运行,该怎么做

如果你想在Git中使用多个SSH密钥,并希望根据远程仓库的URL自动选择正确的密钥进行身份验证,可以按照以下步骤进行操作:

  1. 确保已经为每个远程仓库设置了正确的SSH密钥。你可以使用ssh-keygen命令生成和管理多个SSH密钥。确保每个密钥对应一个不同的远程仓库。

ssh-keygen -t rsa -C "your_email@example.com" -f ~/.ssh/id_rsa_repo1 ssh-keygen -t rsa -C "your_email@example.com" -f ~/.ssh/id_rsa_repo2

在上述示例中,我们为两个不同的远程仓库生成了两个密钥,分别为id_rsa_repo1id_rsa_repo2

  1. 确保你的SSH密钥已经添加到ssh-agent中。你可以使用ssh-add命令将密钥添加到ssh-agent中。

ssh-add ~/.ssh/id_rsa_repo1 ssh-add ~/.ssh/id_rsa_repo2

这会将两个密钥添加到ssh-agent中,以便在需要时进行身份验证。

  1. 编辑~/.ssh/config文件,并添加以下内容:

```
# 远程仓库1
Host repo1.example.com
HostName repo1.example.com
User your_username
IdentityFile ~/.ssh/id_rsa_repo1

# 远程仓库2
Host repo2.example.com
HostName repo2.example.com
User your_username
IdentityFile ~/.ssh/id_rsa_repo2
```

在上述示例中,我们为两个远程仓库配置了主机别名、主机名、用户名和对应的SSH密钥文件路径。
这个用户名是@Gy-sherlock账户姓名而非本地的

你可以根据需要添加更多的远程仓库配置。

  1. 保存并关闭文件。

现在,当你使用Git与远程仓库进行交互时,Git将根据远程仓库的URL自动选择正确的SSH密钥进行身份验证。你无需手动指定密钥。

例如,对于名为repo1的远程仓库,你可以使用以下命令进行操作:

git remote add origin git@repo1.example.com:user/repo1.git

Git将自动使用~/.ssh/id_rsa_repo1密钥与repo1.example.com进行身份验证。

对于另一个远程仓库,你可以使用类似的命令进行操作。

通过这些设置,你可以轻松管理多个远程仓库,并让ssh-agent自动选择正确的密钥进行身份验证。

希望这可以帮助你在Git中使用多个SSH密钥进行身份验证。